如何使用angularjs中的$ resource上传文件

时间:2016-04-20 11:30:20

标签: angularjs

我想在使用$ http之前使用$ resource发布表单数据:

upload : function(file){
          let fd = new FormData();
          fd.append('file', file);
          $http.post('http://localhost:8080/fileUpload', fd, {
              transformRequest: angular.identity,
              headers: {'Content-Type': undefined}
            })
            .success(function(){
            })
            .error(function(){
            });
        }

现在我想使用$ resource,这就是我尝试做的但它不起作用:

upload : function(file){
          let fd = new FormData();
          fd.append('file', file);
          $resource('http://localhost:8080/fileUpload/:id',fd, {
            create: {
              method: "POST",
              transformRequest: angular.identity,
              headers: {'Content-Type': undefined}
            }
          });
        }

编辑(解决方案):

从这篇文章AngularJS: Upload files using $resource (solution)有两个解决方案,@ juandemarco指出的第一个解决方案是配置$http服务,但这将转换AngularJS提出的每个请求,所以第二个@timetowonder指出的一个是更好的解决方案,因为我只需要为实际需要它的那些$资源定义这种行为,所以我尝试了如下:

我的控制器中

var fd = new FormData();
      fd.append('identityDocUpload', $scope.identityDocUpload);
      fileUploadService.create({}, fd).$promise.then(function (res) {
        console.log('success');
      }).catch(function (err) {
        console.log('err');
      });

我的服务:

app
  .factory('fileUploadService', function ($resource) {
    return $resource('http://localhost:8080/fileUpload/:id', { id: "@id" }, {
      create: {
        method: "POST",
        transformRequest: angular.identity,
        headers: { 'Content-Type': undefined }
      }
    });
  });

1 个答案:

答案 0 :(得分:1)

正如这里所指出的,你可以按照解释的方式进行,但你会有一些浏览器版本的限制。 在下面的例子中,他正在上传图片。

AngularJS: Upload files using $resource (solution)