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 相关文章推荐
正则表达式语法
Oct 09 Javascript
解析John Resig Simple JavaScript Inheritance代码
Dec 03 Javascript
浅谈Angular中ngModel的$render
Oct 24 Javascript
浅谈JS读取DOM对象(标签)的自定义属性
Nov 21 Javascript
Vue.js实战之通过监听滚动事件实现动态锚点
Apr 04 Javascript
微信小程序动态的加载数据实例代码
Apr 14 Javascript
jquery获取transform里的值实现方法
Dec 12 jQuery
Vue引入jquery实现平滑滚动到指定位置
May 09 jQuery
JavaScript实现一个带AI的井字棋游戏源码
May 21 Javascript
Vue+mui实现图片的本地缓存示例代码
May 24 Javascript
微信小程序代码上传、审核发布小程序
May 18 Javascript
Element-UI中关于table表格的那些骚操作(小结)
Aug 15 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
UTF8编码内的繁简转换的PHP类
2009/07/09 PHP
提高PHP编程效率 引入缓存机制提升性能
2010/02/15 PHP
ThinkPHP框架安全实现分析
2016/03/14 PHP
yii2中的rules 自定义验证规则详解
2016/04/19 PHP
Laravel框架实现的批量删除功能示例
2019/01/16 PHP
重定向实现代码
2006/11/20 Javascript
jquery插件之信息弹出框showInfoDialog(成功/错误/警告/通知/背景遮罩)
2013/01/09 Javascript
JavaScript中的原型链prototype介绍
2014/12/30 Javascript
JS 实现倒计时数字时钟效果【附实例代码】
2016/03/30 Javascript
Bootstrap基本样式学习笔记之图片(6)
2016/12/07 Javascript
jQuery实现拖拽可编辑模块功能代码
2017/01/12 Javascript
jQuery制作图片旋转效果
2017/02/02 Javascript
Bootstrap常用组件学习(整理)
2017/03/24 Javascript
JavaScript实现前端分页控件
2017/04/19 Javascript
Angular.js中数组操作的方法教程
2017/07/31 Javascript
Nodejs 和Session 原理及实战技巧小结
2017/08/25 NodeJs
用Axios Element实现全局的请求loading的方法
2018/03/15 Javascript
react中使用swiper的具体方法
2018/05/15 Javascript
微信小程序仿微信运动步数排行(交互)
2018/07/13 Javascript
jQuery中常用动画效果函数知识点整理
2018/08/19 jQuery
JavaScript Dom 绑定事件操作实例详解
2019/10/02 Javascript
爬山算法简介和Python实现实例
2014/04/26 Python
Python实现字符串匹配算法代码示例
2017/12/05 Python
利用python实现简易版的贪吃蛇游戏(面向python小白)
2018/12/30 Python
Django框架orM与自定义SQL语句混合事务控制操作
2019/06/27 Python
基于python实现生成指定大小txt文档
2020/07/20 Python
Python第三方库安装缓慢的解决方法
2021/02/06 Python
Madewell美德威尔美国官网:美国休闲服饰品牌
2016/11/25 全球购物
护理学院专科毕业生求职信
2014/06/28 职场文书
宣传活动总结范文
2014/07/01 职场文书
加强作风建设工作总结
2014/10/23 职场文书
深入理解margin塌陷和margin合并的解决方案
2021/06/26 HTML / CSS
Unicode中的CJK(中日韩统一表意文字)字符小结
2021/12/06 HTML / CSS
MySQL 数据库范式化设计理论
2022/04/22 MySQL
Android中的Launch Mode详情
2022/06/05 Java/Android
Python软件包安装的三种常见方法
2022/07/07 Python