带参数的角度文件上传

时间:2014-12-30 16:00:18

标签: javascript angularjs file-upload angular-file-upload

我正在使用Angular-file-upload将文件上传到API:

var upload = function (file) {
    return $upload.upload({
        url: '/api/place/logo',
        data: {place_id: 1, token: <some_token>},
        file: file
    });
};

所有参数似乎都已正确设置。 API期望token出现以进行身份​​验证。出于某种原因,API永远不会收到客户发布的tokenplace_id,并始终以BadRequest回复。

这里有什么问题?

5 个答案:

答案 0 :(得分:3)

试试这个。

角度控制器:

.controller('uploadCtrl', function ($scope, FileUploader) {
    $scope.uploader = new FileUploader({
        url: "./api/file/upload",
        formData: [
            { "data1": "value1" },
            { "data2": "value2" }
        ]
    });
});

在服务器端(在FileController中,方法:上传):

var provider = GetMultipartProvider();
var result = await Request.Content.ReadAsMultipartAsync(provider);

var data1 = result.FormData.Get("data1");
var data2 = result.FormData.Get("data2");

答案 1 :(得分:1)

您使用的是承载令牌吗?我使用https://github.com/nervgh/angular-file-upload并遇到了类似的问题,结果是使用AJAX而不是$ http发生的文件帖子,所以授权拦截器服务(应该将令牌注入到所有传出中)来自我的角网站的流量)没有工作。

根据您的图书馆的工作方式,您可能会遇到类似的问题。如果是这样,您必须将令牌指定为&#39;授权&#39;标题,某些内容(在我之前由令牌提供程序授权后,我从localStorage检索authData):

<span ng-bind="option.Name"></span> 

答案 2 :(得分:0)

我喜欢这个:

var tokenHeader = $http.defaults.headers.common.Authorization;

var uploader = $scope.uploader = new FileUploader({
    url: '/api/WS_Books/PostBooks',
    autoUpload: true,
    headers: { "Authorization": tokenHeader },
    withCredentials: true
});

答案 3 :(得分:0)

您可以使用onBeforeUploadItem方法注入jwt令牌

    uploader.onBeforeUploadItem = function (item) {
      item.headers = {
      'Authorization': 'Bearer ' + localStorage.getItem('token_name')
       };
    };

答案 4 :(得分:0)

这对我有用。我使用PHP

您可以使用formData属性

将值发送到PHP
app.controller ('FileUploadCtrl', ['$ scope', 'FileUploader', 
function ($ scope, FileUploader) {
var uploader = $ scope.uploader = new FileUploader ({
    url: '.myapi / mycontrollers / myuploadfile.php',
    formData: [{
             data1: 'value1',
             data2: 'value2',
             dataN: 'valueN'
           }]
});

在PHP中,您使用$ _REQUEST来捕获formData

中可用的信息
$myValue1 = $_REQUEST ['data1'];
$myValue2 = $_REQUEST ['data2'];
$myValue3 = $_REQUEST ['dataN'];