GVKun编程网logo

AngularJS上传文件(angular 上传文件)

12

如果您对AngularJS上传文件和angular上传文件感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解AngularJS上传文件的各种细节,并对angular上传文件进行深入的分析,此外还有

如果您对AngularJS上传文件angular 上传文件感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解AngularJS上传文件的各种细节,并对angular 上传文件进行深入的分析,此外还有关于$ http在AngularJS中上传文件的进度、angularjs – Angular.js和Amazon S3 – 如何上传文件?、angularjs – ng-repeat中的Angular-js文件上传、angularjs – 使用Saucelabs上传量角器文件的实用技巧。

本文目录一览:

AngularJS上传文件(angular 上传文件)

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.identityanjularjs 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();
        }
    }

注意

  • ObjectMappercom.fasterxml.jackson.databind.ObjectMapper

$ http在AngularJS中上传文件的进度

$ http在AngularJS中上传文件的进度

如何从正在上传图像的AngularJS $ http POST请求中获取“进度”事件?是否可以在客户端进行此操作,还是我需要服务器在接收数据时报告进度?

angularjs – Angular.js和Amazon S3 – 如何上传文件?

angularjs – Angular.js和Amazon S3 – 如何上传文件?

我在Angular.js中有一个应用程序.事实上,我在我的旧网站上做了更新,改为Angular.

在旧版本中,我使用Uploadfy jquery组件来在Amazon S3中上传.但现在,有了Angular,我无法使用它.

我想使用指令“ngUpload”.但我不知道该怎么做.
有人可以帮我吗?

解决方法

您可以使用 angular-file-upload轻量级角度指令,该指令支持文件进度和文件丢弃.

您可以在此处关注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文件上传

angularjs – ng-repeat中的Angular-js文件上传

我的html文件:Upload.html

<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);

截图:

enter image description here

当我上传一个文件的工作文件时,当我添加多个文件时,我无法在控制台中获得第二个文件名.任何人都可以建议我,如何在上传点击后立即获取多个文件.

[{
    "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"
}]

解决方法

在ng-repeat中使用此代码

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上传量角器文件

angularjs – 使用Saucelabs上传量角器文件

我正在使用量角器测试AngularJS项目.我有一个图像文件上传测试,它正在我的本地mac机器上正常工作和传递.但是,当我通过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上传量角器文件等相关知识的信息别忘了在本站进行查找喔。

本文标签: