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 相关文章推荐
Js参数值中含有单引号或双引号问题的解决方法
Nov 06 Javascript
JQuery插入DOM节点的方法
Jun 11 Javascript
JS实现的简洁二级导航菜单雏形效果
Oct 13 Javascript
JS实现选中当前菜单后高亮显示的导航条效果
Oct 15 Javascript
jquery.cookie.js用法实例详解
Dec 25 Javascript
javascript 判断页面访问方式电脑或者移动端
Sep 19 Javascript
AngularJS入门教程之数据绑定用法示例
Nov 01 Javascript
jQuery Ajax前后端使用JSON进行交互示例
Mar 17 Javascript
JS奇技之利用scroll来监听resize详解
Jun 15 Javascript
react+ant design实现Table的增、删、改的示例代码
Dec 27 Javascript
js遍历详解(forEach, map, for, for...in, for...of)
Aug 28 Javascript
JavaScript的console命令使用实例
Dec 03 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
php 团购折扣计算公式
2011/11/24 PHP
php及codeigniter使用session-cookie的方法(详解)
2017/04/06 PHP
使Ext的Template可以解析二层的json数据的方法
2007/12/22 Javascript
JavaScript 和 Java 的区别浅析
2013/07/31 Javascript
jquery 实现密码框的显示与隐藏示例代码
2013/09/18 Javascript
javascript查询字符串参数的方法
2015/01/28 Javascript
JS实现自动固定顶部的悬浮菜单栏效果
2015/09/16 Javascript
jQuery遮罩层实现方法实例详解(附遮罩层插件)
2015/12/08 Javascript
node.js使用cluster实现多进程
2016/03/17 Javascript
JS实现关闭当前页而不弹出提示框的方法
2016/06/22 Javascript
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
2016/12/14 Javascript
图文详解Javascript中的上下文和作用域
2017/02/15 Javascript
详解Angular2组件之间如何通信
2017/06/22 Javascript
详解angularjs获取元素以及angular.element()用法
2017/07/25 Javascript
Windows安装Node.js报错:2503、2502的解决方法
2017/10/25 Javascript
深入浅析JSONAPI在PHP中的应用
2017/12/24 Javascript
Node.js 使用AngularJS的方法示例
2018/05/11 Javascript
JS实现获取毫秒值及转换成年月日时分秒的方法
2018/08/15 Javascript
微信小程序视图控件与bindtap之间的问题的解决
2019/04/08 Javascript
在vue中高德地图引入和轨迹的绘制的实现
2019/10/11 Javascript
React学习之受控组件与数据共享实例分析
2020/01/06 Javascript
Python import与from import使用及区别介绍
2018/09/06 Python
解决python3中的requests解析中文页面出现乱码问题
2019/04/19 Python
flask框架jinja2模板与模板继承实例分析
2019/08/01 Python
python数据归一化及三种方法详解
2019/08/06 Python
Pytorch之finetune使用详解
2020/01/18 Python
纯CSS实现的大小渐变、渐远效果
2014/04/15 HTML / CSS
台湾乐天市场:日本No.1的网路购物网站
2017/03/22 全球购物
您的健身减肥和健康饮食专家:vitafy
2017/06/06 全球购物
财务经理的岗位职责
2013/12/17 职场文书
幼儿园端午节活动方案
2014/08/25 职场文书
2015年毕业生自我鉴定模板
2014/09/19 职场文书
国际贸易实训报告
2014/11/05 职场文书
服务明星事迹材料
2014/12/29 职场文书
民间借贷被告代理词
2015/05/23 职场文书
《烈火英雄》观后感:致敬和平时代的英雄
2019/11/11 职场文书