AngularJS上传文件的示例代码


Posted in Javascript onNovember 10, 2018

使用AngularJS上传文件

  • 前台是Angular页面
  • 后台使用SpringBoot/SpirngMVC

上传文件

html

<div>
  <input id="fileUpload" type="file" />
  <button ng-click="uploadFile()">上传</button>
</div>

js

$scope.upload = function(){
      var form = new FormData();
      var file = document.getElementById("fileUpload").files[0];
      form.append('file', file);
      $http({
        method: 'POST',
        url: '/upload',
        data: form,
        headers: {'Content-Type': undefined},
        transformRequest: angular.identity
      }).success(function (data) {
        console.log('upload success');
      }).error(function (data) {
         console.log('upload fail');
      })
    }

注意:

  • AngularJS默认的'Content-Type'是application/json ,通过设置'Content-Type': undefined,这样浏览器不仅帮我们把Content-Type 设置为 multipart/form-data,还填充上当前的boundary,
  • 如果手动设置为:'Content-Type': multipart/form-data,后台会抛出异常:the request was rejected because no multipart boundary was found
  • boundary 是随机生成的字符串,用来分隔文本的开始和结束
  • 通过设置 transformRequest: angular.identity ,anjularjs transformRequest function 将序列化我们的formdata object,也可以不添加

后台

@RequestMapping("/upload")
  public void uploadFile(@RequestParam(value = "file" , required = true) MultipartFile file) {
    //deal with file
  }

注意

文件必须通过@RequestParam注解来获取,且需指定value才能获取到

这样就完成了上传文件

上传文件的同时传递其他参数

html

<div>
    <input id="fileUpload" type="file" />
    <button ng-click="ok()">上传</button><br>
    <input ng-model="user.username" />
    <input ng-model="user.password" />
  </div>

js

$scope.ok = function () {
    var form = new FormData();
    var file = document.getElementById("fileUpload").files[0];  
    var user =JSON.stringify($scope.user);

    form.append('file', file);
    form.append('user',user);

    $http({
      method: 'POST',
      url: '/addUser',
      data: form,
      headers: {'Content-Type': undefined},
      transformRequest: angular.identity
    }).success(function (data) {
      console.log('operation success');
    }).error(function (data) {
      console.log('operation fail');
    })
  };

注意

需要将Object转为String后在附加到form上,否则会直接被转为字符串[Object,object]

后台

@RequestMapping("/upload")
  public Map<String, Object> upload(@RequestParam(value = "file") MultipartFile file, @RequestParam(value = "user", required = true) String user) {

    try (FileInputStream in = (FileInputStream) headImg.getInputStream();
       FileOutputStream out = new FileOutputStream("filePathAndName")) {

      //将Json对象解析为UserModel对象
      ObjectMapper objectMapper = new ObjectMapper();
      UserModel userModel = objectMapper.readValue(user, UserModel.class);

      //保存文件到filePathAndName
      int hasRead = 0;
      byte[] bytes = new byte[1024];
      while ((hasRead = in.read(bytes)) > 0) {
        out.write(bytes, 0, hasRead);
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

注意

ObjectMapper为com.fasterxml.jackson.databind.ObjectMapper

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Jquery中删除元素的实现代码
Dec 29 Javascript
JavaScript插入动态样式实现代码
Feb 22 Javascript
jquery表单验证使用插件formValidator
Nov 10 Javascript
JavaScript获取当前日期是星期几的方法
Apr 06 Javascript
JS中数组重排序方法
Nov 11 Javascript
原生JS实现图片轮播切换效果
Dec 15 Javascript
js实现会跳动的日历效果(完整实例)
Oct 18 Javascript
vue-cli3.0配置及使用注意事项详解
Sep 05 Javascript
浅谈微信小程序flex布局基础
Sep 10 Javascript
PWA介绍及快速上手搭建一个PWA应用的方法
Jan 27 Javascript
基于vue-draggable 实现三级拖动排序效果
Jan 10 Javascript
原生js实现表格翻页和跳转
Sep 29 Javascript
详解vue-cli 3.0 build包太大导致首屏过长的解决方案
Nov 10 #Javascript
优雅的在React项目中使用Redux的方法
Nov 10 #Javascript
Vue组件之单向数据流的解决方法
Nov 10 #Javascript
详解如何制作并发布一个vue的组件的npm包
Nov 10 #Javascript
如何在基于vue-cli的项目自定义打包环境
Nov 10 #Javascript
Vue项目报错:Uncaught SyntaxError: Unexpected token
Nov 10 #Javascript
node+express框架中连接使用mysql(经验总结)
Nov 10 #Javascript
You might like
main.php
2006/12/09 PHP
php中将地址生成迅雷快车旋风链接的代码[测试通过]
2011/04/20 PHP
php连接mssql的一些相关经验及注意事项
2013/02/05 PHP
PHP仿博客园 个人博客(2) 数据库增添改删
2013/07/05 PHP
PHP中把有符号整型转换为无符号整型方法
2015/05/27 PHP
php合并数组并保留键值的实现方法
2018/03/12 PHP
jQuery的.live()和.die() 使用介绍
2011/09/10 Javascript
js 程序执行与顺序实现详解
2013/05/13 Javascript
js 走马灯简单实例
2013/11/21 Javascript
jquery ajax 局部无刷新更新数据的实现案例
2014/02/08 Javascript
自定义jQuery插件方式实现强制对象重绘的方法
2015/03/23 Javascript
js实现带圆角的多级下拉菜单效果
2015/08/28 Javascript
js实现页面跳转的五种方法推荐
2016/03/10 Javascript
JS面试题---关于算法台阶的问题
2016/07/26 Javascript
关于Iframe父页面与子页面之间的相互调用
2016/11/22 Javascript
jQueryUI 拖放排序遇到滚动条时有可能无法执行排序的小bug及解决方案
2016/12/19 Javascript
js实现移动端微信页面禁止字体放大
2017/02/16 Javascript
AngularJS $http模块POST请求实现
2017/04/08 Javascript
spirngmvc js传递复杂json参数到controller的实例
2018/03/29 Javascript
JavaScript变量基本使用方法实例分析
2019/11/15 Javascript
jquery实现的放大镜效果示例
2020/02/24 jQuery
浅析vue cli3 封装Svgicon组件正确姿势(推荐)
2020/04/27 Javascript
浅谈Vue3 Composition API如何替换Vue Mixins
2020/04/29 Javascript
Python获取系统所有进程PID及进程名称的方法示例
2018/05/24 Python
python把数组中的数字每行打印3个并保存在文档中的方法
2018/07/17 Python
Python实现的简单计算器功能详解
2018/08/25 Python
Python画图实现同一结点多个柱状图的示例
2019/07/07 Python
Flask框架学习笔记之消息提示与异常处理操作详解
2019/08/15 Python
对Django中的权限和分组管理实例讲解
2019/08/16 Python
Python threading.local代码实例及原理解析
2020/03/16 Python
Python任务调度利器之APScheduler详解
2020/04/02 Python
tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
2020/06/30 Python
Zooplus葡萄牙:欧洲领先的网上宠物商店
2018/07/01 全球购物
计算机软件专业求职信
2014/06/10 职场文书
班组拓展活动方案
2014/08/14 职场文书
python迷宫问题深度优先遍历实例
2021/06/20 Python