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实现兼容IE6与IE7的DIV高度
May 13 Javascript
javascrip客户端验证文件大小及文件类型并重置上传
Jan 12 Javascript
JavaScript运行时库属性一览表
Mar 14 Javascript
JS使用replace()方法和正则表达式进行字符串的搜索与替换实例
Apr 10 Javascript
jquery $.trim()方法使用介绍
May 21 Javascript
jquery+正则实现统一的表单验证
Sep 20 Javascript
JS实现状态栏跑马灯文字效果代码
Oct 24 Javascript
js实现String.Fomat的实例代码
Sep 02 Javascript
通过jsonp获取json数据实现AJAX跨域请求
Jan 22 Javascript
微信小程序中form 表单提交和取值实例详解
Apr 20 Javascript
AngularJS实现页面跳转后自动弹出对话框实例代码
Aug 02 Javascript
Vue组件生命周期运行原理解析
Nov 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
地球防卫队:陪着奥特曼打小怪兽的人类力量 那些经典队服
2020/03/08 日漫
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
2014/06/26 PHP
php递归删除目录与文件的方法
2015/01/30 PHP
Laravel框架Eloquent ORM修改数据操作示例
2019/12/03 PHP
浅析PHP中json_encode与json_decode的区别
2020/07/15 PHP
Javascript的IE和Firefox兼容性汇编(zz)
2007/02/02 Javascript
通过JQuery实现win8一样酷炫的动态磁贴效果(示例代码)
2013/07/13 Javascript
NodeJS的url截取模块url-extract的使用实例
2013/11/18 NodeJs
jquery+php实现滚动的数字特效
2015/11/29 Javascript
jQuery数据类型小结(14个)
2016/01/08 Javascript
javascript中Number的方法小结
2016/11/21 Javascript
浅析JS中常用类型转换及运算符表达式
2017/07/23 Javascript
JS实现的视频弹幕效果示例
2018/08/17 Javascript
Node.js npm命令运行node.js脚本的方法
2018/10/10 Javascript
vue如何根据网站路由判断页面主题色详解
2018/11/02 Javascript
在layui框架中select下拉框监听更改事件的例子
2019/09/20 Javascript
vue微信分享插件使用方法详解
2020/02/18 Javascript
JS倒计时两种实现方式代码实例
2020/07/27 Javascript
python实现监控linux性能及进程消耗性能的方法
2014/07/25 Python
Python实现Sqlite将字段当做索引进行查询的方法
2016/07/21 Python
python 自动化将markdown文件转成html文件的方法
2016/09/23 Python
Python实现一个简单的验证码程序
2017/11/03 Python
详解Django+Uwsgi+Nginx 实现生产环境部署
2018/11/06 Python
浅析python的Lambda表达式
2019/02/27 Python
Python面向对象中类(class)的简单理解与用法分析
2020/02/21 Python
浅谈python出错时traceback的解读
2020/07/15 Python
Python爬虫中Selenium实现文件上传
2020/12/04 Python
澳大利亚电子产品购物网站:Dick Smith
2017/02/02 全球购物
英国最大的独立玩具专卖店:The Entertainer
2019/09/06 全球购物
后勤采购员岗位职责
2013/12/19 职场文书
决心书范文
2014/03/11 职场文书
理想演讲稿范文
2014/05/21 职场文书
副乡长群众路线教育实践活动个人对照检查材料
2014/09/19 职场文书
2015年结对帮扶工作总结
2015/05/04 职场文书
升职感谢领导的话语及升职感谢信
2019/06/24 职场文书
使用nginx配置访问wgcloud的方法
2021/06/26 Servers