如果您对AngularJS上传文件和angular上传文件感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解AngularJS上传文件的各种细节,并对angular上传文件进行深入的分析,此外还有
如果您对AngularJS上传文件和angular 上传文件感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解AngularJS上传文件的各种细节,并对angular 上传文件进行深入的分析,此外还有关于$ http在AngularJS中上传文件的进度、angularjs – Angular.js和Amazon S3 – 如何上传文件?、angularjs – ng-repeat中的Angular-js文件上传、angularjs – 使用Saucelabs上传量角器文件的实用技巧。
本文目录一览:- AngularJS上传文件(angular 上传文件)
- $ http在AngularJS中上传文件的进度
- angularjs – Angular.js和Amazon S3 – 如何上传文件?
- angularjs – ng-repeat中的Angular-js文件上传
- angularjs – 使用Saucelabs上传量角器文件
AngularJS上传文件(angular 上传文件)
使用
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]; fd.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',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
$ http在AngularJS中上传文件的进度
如何从正在上传图像的AngularJS $ http POST请求中获取“进度”事件?是否可以在客户端进行此操作,还是我需要服务器在接收数据时报告进度?
angularjs – Angular.js和Amazon S3 – 如何上传文件?
在旧版本中,我使用Uploadfy jquery组件来在Amazon S3中上传.但现在,有了Angular,我无法使用它.
我想使用指令“ngUpload”.但我不知道该怎么做.
有人可以帮我吗?
解决方法
您可以在此处关注Amazon S3问题,其中包含示例代码,以及如何将所有这些数据与文件上载一起发送:
https://github.com/danialfarid/angular-file-upload/issues/23
S3上传应该适用于上面的1.1.1版.
另一个相关问题:https://github.com/danialfarid/angular-file-upload/issues/23
angularjs – ng-repeat中的Angular-js文件上传
<tr ng-repeat="expenses in finalJson.comments"> <td > <div> <label for="file-input"> <img src="../images/upload1.jpg"/>{{data.files[0].name}} </label> <input id="file-input" type="file" ng-model="expenses.files" ngf-select accept="*" value=""/> </div> </td> </tr>
controller:UploadController
单击上传后,我用它来获取文件名
var json = JSON.stringify($scope.finalJson.comments);
的console.log(JSON);
截图:
当我上传一个文件的工作文件时,当我添加多个文件时,我无法在控制台中获得第二个文件名.任何人都可以建议我,如何在上传点击后立即获取多个文件.
[{ "index": 1,"amount": "10","$$hashKey": "object:5","date": "2016-04-11","Category": "58","note": "wdxw","paid_to": "swdw","files": { "webkitRelativePath": "","lastModified": 1450934331000,"lastModifiedDate": "2015-12-24T05:18:51.000Z","name": "node-js.pdf","type": "application/pdf","size": 182649 } },{ "$$hashKey": "object:31","date": "2016-04-05","Category": "60","note": "scds","paid_to": "dsad","amount": "20" }]
解决方法
HTML代码:
<div ng-controller = "myCtrl"> <div ng-repeat="fileInput in fileInputs"> <input type="file" file-model="{{'myFile' + $index}}"/> <button ng-click="uploadFile('myFile' + $index)">upload me</button> </div> </div>
控制器代码:
var myApp = angular.module('myApp',[]); myApp.directive('fileModel',['$parse',function ($parse) { return { restrict: 'A',link: function(scope,element,attrs) { var model,modelSetter; attrs.$observe('fileModel',function(fileModel){ model = $parse(attrs.fileModel); modelSetter = model.assign; }); element.bind('change',function(){ scope.$apply(function(){ modelSetter(scope.$parent,element[0].files[0]); }); }); } }; }]); myApp.service('fileUpload',['$http',function ($http) { this.uploadFiletoUrl = function(file,uploadUrl){ var fd = new FormData(); fd.append('file',file); $http.post(uploadUrl,fd,{ transformRequest: angular.identity,headers: {'Content-Type': undefined} }) .success(function(){ }) .error(function(){ }); } }]); myApp.controller('myCtrl',['$scope','fileUpload',function($scope,fileUpload){ $scope.fileInputs = [1,2,3]; $scope.uploadFile = function(filename){ var file = $scope[filename]; console.log('file is ' + JSON.stringify(file)); console.dir(file); var uploadUrl = "http://httpbin.org/post"; fileUpload.uploadFiletoUrl(file,uploadUrl); }; }]);
angularjs – 使用Saucelabs上传量角器文件
Saucelabs在查找文件时遇到问题,只是打开一个对话框但找不到该文件.该文件在我的测试解决方案内,而不是在saucelabs中.我在网上寻找答案,但我还没有看到解决这一特定问题的明确答案.下面是我用来上传针对应用程序的图像文件的代码示例.
var path = require('path'); it('should upload a file',function() { var filetoUpload = '../some/path/foo.txt',absolutePath = path.resolve(__dirname,filetoUpload); $('input[type="file"]').sendKeys(absolutePath); $('#uploadButton').click(); });
如何通过Saucelabs获得上述代码的任何帮助或建议将不胜感激.
解决方法
browser.driver.setFileDetector(new browser.driver.remote.FileDetector);
根据the protractor issue,它或者它不起作用(Selenium JavaScript绑定或量角器中的错误,或版本不匹配).
在同一个github问题中,如果主要解决方案不起作用,还有a workaround(tldr:文件共享).
关于AngularJS上传文件和angular 上传文件的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于$ http在AngularJS中上传文件的进度、angularjs – Angular.js和Amazon S3 – 如何上传文件?、angularjs – ng-repeat中的Angular-js文件上传、angularjs – 使用Saucelabs上传量角器文件等相关知识的信息别忘了在本站进行查找喔。
本文标签: