使用ng-file-upload指令将文件上载到sails.js服务器

Sir*_*mon 2 javascript file-upload node.js angularjs sails.js

我正在尝试使用以下指令将文件上传到sails.js应用程序服务器: ng-file-upload

我的客户端上传已经选择的图像是这样的:

$upload.upload({
        url:'upload/item-image',
        headers:{
            'Content-Type': 'multipart/form-data'
        },
        data:{blah:'blah'},
        file: $scope.uploadFile,
        fileName:$scope.uploadFile.name
    }).success(function(data){
        console.log(data);
    }).error(function(err){
        console.log(err);
    });
Run Code Online (Sandbox Code Playgroud)

我在服务器上处理上传的sails.js控制器方法如下所示:

upload: function (req, res) {
    req.file('item-image').upload(function (err, files) {
        if (err)
            return res.serverError(err);
        if(!files.length)
            return res.serverError('No files received for upload.');

        var file = files[0];
   ...
   }
...
}
Run Code Online (Sandbox Code Playgroud)

但是,在调用服务器函数时,并且正文上的json数据存在,req.file('无论放在何处')回调没有找到任何文件.

提前致谢.

sgr*_*454 7

req.file需要的参数是Sails应该查找上传文件的请求中字段的名称.如果您正在使用以下内容执行简单的HTML表单:

<input type="file" name="myFileField" />
Run Code Online (Sandbox Code Playgroud)

那么在您的控制器代码中,您将拥有:

req.file('myFileField').upload(...);
Run Code Online (Sandbox Code Playgroud)

对于像本问题中引用的ng-file-upload小部件这样的上传小部件,有时候弄清楚该字段名称是什么有点棘手.在这种情况下,它隐藏在使用说明中:

//fileFormDataName: myFile, // or a list of names for multiple files (html5). 
                            // Default is 'file' 
Run Code Online (Sandbox Code Playgroud)

因此,您可以设置fileFormDataName更改上载字段名称,否则默认为file.

如果您在文档中找不到字段名称或通过检查HTML,最简单的方法就是上传(即使它不成功)并使用Chrome中的开发人员工具检查网络请求:

在此输入图像描述

这是来自Angular文件上传演示页面.你可以在右下角看到它所说的name="myFile"; 这就是你要找的东西.在这种情况下,将调用文件字段myFile.