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 相关文章推荐
利用javascript移动div层-javascript 拖动层
Mar 22 Javascript
jQuery mobile在页面加载时添加加载中效果 document.ready 和window.onload执行顺序比较
Jul 14 Javascript
JS打印组合功能
Aug 04 Javascript
Angularjs在初始化未完毕时出现闪烁问题的解决方法分析
Aug 05 Javascript
基于jQuery的select下拉框选择触发事件实例分析
Nov 18 Javascript
Vue 固定头 固定列 点击表头可排序的表格组件
Nov 25 Javascript
JS 实现banner图片轮播效果(鼠标事件)
Aug 04 Javascript
关于JS与jQuery中的文档加载问题
Aug 22 jQuery
js最简单的双向绑定实例讲解
Jan 02 Javascript
vuex的module模块用法示例
Nov 12 Javascript
webpack4手动搭建Vue开发环境实现todoList项目的方法
May 16 Javascript
express启用https使用小记
May 21 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
Linux下PHP连接Oracle数据库
2014/08/20 PHP
php计算税后工资的方法
2015/07/28 PHP
PHP实现的网站目录扫描索引工具
2016/09/08 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
javascript之典型高阶函数应用介绍
2013/01/10 Javascript
js实现文字在按钮上滚动的方法
2015/08/20 Javascript
angularjs学习笔记之简单介绍
2015/09/26 Javascript
js通过指定下标或指定元素进行删除数组的实例
2017/01/12 Javascript
jQuery实现鼠标悬停3d菜单展开动画效果
2017/01/19 Javascript
Bootstrap响应式导航由768px变成992px的实现代码
2017/06/15 Javascript
vue-router+vuex addRoutes实现路由动态加载及菜单动态加载
2017/09/28 Javascript
初识 Vue.js 中的 *.Vue文件
2017/11/22 Javascript
vuejs前后端数据交互之从后端请求数据的实例
2018/08/11 Javascript
vue使用echarts图表的详细方法
2018/10/22 Javascript
JavaScript实现小球沿正弦曲线运动
2020/09/07 Javascript
javascript设计模式 ? 策略模式原理与用法实例分析
2020/04/21 Javascript
[01:37]DOTA2超级联赛专访ChuaN 传奇般的电竞之路
2013/06/19 DOTA
python requests 测试代理ip是否生效
2018/07/25 Python
超简单使用Python换脸实例
2019/03/27 Python
Python 闭包,函数分隔作用域,nonlocal声明非局部变量操作示例
2019/10/14 Python
关于Python-faker的函数效果一览
2019/11/28 Python
解决Python3.8用pip安装turtle-0.0.2出现错误问题
2020/02/11 Python
利于python脚本编写可视化nmap和masscan的方法
2020/12/29 Python
劳力士官方珠宝商:J.R. Dunn Jewelers
2018/09/29 全球购物
世界排名第一的万圣节服装店:Spirit Halloween
2018/10/16 全球购物
应届生煤化工求职信
2013/10/21 职场文书
英文版餐饮运营管理求职信
2013/11/06 职场文书
演讲稿开场白台词
2014/08/25 职场文书
领导班子遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
齐云山导游词
2015/02/06 职场文书
培训讲师开场白
2015/06/01 职场文书
为自己工作观后感
2015/06/11 职场文书
哈姆雷特读书笔记
2015/06/29 职场文书
创业计划书之孕婴生活馆
2019/11/11 职场文书
php实例化对象的实例方法
2021/11/17 PHP
Win10 和 Win11可以共存吗? win10/11产品生命周期/服务更新介绍
2021/11/21 数码科技