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学习3:操作元素属性和特性
Feb 07 Javascript
JS获取select的value和text值的简单实例
Feb 26 Javascript
JavaScript匿名函数之模仿块级作用域
Dec 12 Javascript
js点击文本框弹出可选择的checkbox复选框
Feb 03 Javascript
Function.prototype.apply()与Function.prototype.call()小结
Apr 27 Javascript
详解微信小程序开发之——wx.showToast(OBJECT)的使用
Jan 18 Javascript
jQuery实现一个简单的轮播图
Feb 19 Javascript
原生JS 购物车及购物页面的cookie使用方法
Aug 21 Javascript
简单谈谈js的数据类型
Sep 25 Javascript
实例详解vue.js浅度监听和深度监听及watch用法
Aug 16 Javascript
js实现内置计时器
Dec 16 Javascript
在vue项目中封装echarts的步骤
Dec 25 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
Discuz板块横排显示图片的实现方法
2007/05/28 PHP
php时间不正确的解决方法
2008/04/09 PHP
php实现zip文件解压操作
2015/11/03 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
php post json参数的传递和接收处理方法
2018/05/31 PHP
PHP+Redis开发的书签案例实战详解
2019/07/09 PHP
js判断输入是否为正整数、浮点数等数字的函数代码
2010/11/17 Javascript
JavaScript获得url所有参数键值表的方法
2015/03/21 Javascript
jQuery实时显示鼠标指针位置和键盘ASCII码
2016/03/28 Javascript
在Vue中使用echarts的实例代码(3种图)
2017/07/10 Javascript
微信小程序之滚动视图容器的实现方法
2017/09/26 Javascript
详解Node.js模板引擎Jade入门
2018/01/19 Javascript
小程序云开发如何实现图片上传及发表文字
2019/05/17 Javascript
js回文数的4种判断方法示例
2019/06/04 Javascript
vue分页器组件编写方法详解
2019/06/28 Javascript
node命令行工具之实现项目工程自动初始化的标准流程
2019/08/12 Javascript
Node中对非阻塞I/O、事件循环的知识点总结
2020/01/05 Javascript
JavaScript 中的六种循环方法
2021/01/06 Javascript
使用Python的判断语句模拟三目运算
2015/04/24 Python
详解python的webrtc库实现语音端点检测
2017/05/31 Python
使用python对excle和json互相转换的示例
2018/10/23 Python
Django Rest framework认证组件详细用法
2019/07/25 Python
Python Django框架url反向解析实现动态生成对应的url链接示例
2019/10/18 Python
ansible动态Inventory主机清单配置遇到的坑
2020/01/19 Python
keras 权重保存和权重载入方式
2020/05/21 Python
美国生日蛋糕店:Bake Me A Wish!
2017/02/08 全球购物
城野医生官方海外旗舰店:风靡亚洲毛孔收敛水
2018/04/26 全球购物
Vichy薇姿加拿大官网:法国药妆,全球专业敏感肌护肤领先品牌
2018/07/11 全球购物
Java中compareTo和compare的区别
2016/04/12 面试题
党建示范点实施方案
2014/03/12 职场文书
2014年信息技术工作总结
2014/12/16 职场文书
财务会计岗位职责
2015/02/03 职场文书
普通员工辞职信范文
2015/05/12 职场文书
python操作xlsx格式文件并读取
2021/06/02 Python
Java内存模型之happens-before概念详解
2021/06/13 Java/Android
数据库之SQL技巧整理案例
2021/07/07 SQL Server