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 相关文章推荐
滚动经典最新话题[prototype框架]下编写
Oct 03 Javascript
firefox浏览器下javascript 拖动层效果与原理分析代码
Dec 04 Javascript
Chrome Form多次提交表单问题的解决方法
May 09 Javascript
JavaScript判断表单中多选框checkbox选中个数的方法
Aug 17 Javascript
前端弹出对话框 js实现ajax交互
Sep 09 Javascript
ThinkJS中如何使用MongoDB的CURD操作
Dec 13 Javascript
JavaScript三种绑定事件方式及相互之间的区别分析
Jan 10 Javascript
Vue中的数据监听和数据交互案例解析
Jul 12 Javascript
详解webpack-dev-server使用http-proxy解决跨域问题
Jan 13 Javascript
微信小程序新闻网站详情页实例代码
Jan 10 Javascript
JavaScript实现简单动态表格
Dec 02 Javascript
vue3.0实现插件封装
Dec 14 Vue.js
详解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
php返回相对时间(如:20分钟前,3天前)的方法
2015/04/14 PHP
PHP小偷程序的设计与实现方法详解
2016/10/15 PHP
javascript while语句和do while语句的区别分析
2007/12/08 Javascript
一些javascript一些题目的解析
2010/12/25 Javascript
用JavaScript实现页面重定向功能的教程
2015/06/04 Javascript
JavaScript中getUTCSeconds()方法的使用详解
2015/06/11 Javascript
javascript数组去重的六种方法汇总
2015/08/16 Javascript
js变形金刚文字特效代码分享
2015/08/20 Javascript
Bootstrap 粘页脚效果
2016/03/28 Javascript
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
2016/12/14 Javascript
JS正则匹配URL网址的方法(可匹配www,http开头的一切网址)
2017/01/06 Javascript
JS实现上传图片实时预览功能
2017/05/22 Javascript
vue的事件绑定与方法详解
2017/08/16 Javascript
vue.js input框之间赋值方法
2018/08/24 Javascript
Vue图片浏览组件v-viewer用法分析【支持旋转、缩放、翻转等操作】
2019/11/04 Javascript
原生js实现ajax请求和JSONP跨域请求操作示例
2020/03/14 Javascript
解决vue项目获取dom元素宽高总是不准确问题
2020/07/29 Javascript
Python计算开方、立方、圆周率,精确到小数点后任意位的方法
2018/07/17 Python
pandas去重复行并分类汇总的实现方法
2019/01/29 Python
Django web框架使用url path name详解
2019/04/29 Python
python实现感知机线性分类模型示例代码
2019/06/02 Python
python 模拟创建seafile 目录操作示例
2019/09/26 Python
特步官方商城:Xtep
2017/03/21 全球购物
Oroton中国官网:澳洲知名奢侈配饰品牌
2017/03/26 全球购物
中专生的个人自我评价
2013/12/11 职场文书
中专毕业生自我鉴定
2014/02/02 职场文书
《三袋麦子》教学反思
2014/03/02 职场文书
党员领导干部廉洁从政承诺书
2014/03/27 职场文书
计算机系统管理员求职信
2014/06/20 职场文书
学校消防安全责任书
2014/07/23 职场文书
2014年党员自我评议(5篇)
2014/09/12 职场文书
幼儿园国庆节活动总结
2015/03/23 职场文书
护士求职自荐信
2015/03/25 职场文书
工厂门卫岗位职责
2015/04/13 职场文书
寻找最美乡村教师观后感
2015/06/18 职场文书
Python绘制分类图的方法
2021/04/20 Python