Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带参数的角度文件上传_Javascript_Angularjs_File Upload_Angular File Upload - Fatal编程技术网

Javascript 带参数的角度文件上传

Javascript 带参数的角度文件上传,javascript,angularjs,file-upload,angular-file-upload,Javascript,Angularjs,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 }); }; var upload=函数(文件){ 返回$upload.upload({ url:“/api/place/

我使用以下方法将文件上载到API:

var upload = function (file) {
    return $upload.upload({
        url: '/api/place/logo',
        data: {place_id: 1, token: <some_token>},
        file: file
    });
};
var upload=函数(文件){
返回$upload.upload({
url:“/api/place/logo”,
数据:{place_id:1,令牌:},
档案:档案
});
};
所有参数似乎都设置正确。API期望
令牌
存在以进行身份验证。由于某些原因,API从未收到客户端发布的
令牌
place\u id
,并始终以
BadRequest
响应


这里有什么问题?

您使用的是无记名代币吗?我在使用时遇到了一个类似的问题,结果证明文件发布是使用AJAX而不是$http进行的,因此授权拦截服务(应该将令牌注入我的angular网站的所有传出流量)不起作用

根据库的工作方式,您可能会遇到类似的问题。如果是这样的话,您必须将令牌指定为“Authorization”头,如下所示(在此之前,我已获得令牌提供程序的授权,正在从localStorage检索authData):

我喜欢这样:

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
});
试试这个

在角度控制器处:

.controller('uploadCtrl', function ($scope, FileUploader) {
    $scope.uploader = new FileUploader({
        url: "./api/file/upload",
        formData: [
            { "data1": "value1" },
            { "data2": "value2" }
        ]
    });
});
在服务器端(在FileController中,方法:上载):


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

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

这对我有用。我正在使用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中,您使用$\u请求捕获formData中可用的信息

$myValue1 = $_REQUEST ['data1'];
$myValue2 = $_REQUEST ['data2'];
$myValue3 = $_REQUEST ['dataN'];

令牌不应该是数据的一部分,它应该是头的一部分,如果我不是mistaken@HarishR在理想情况下,是的。但我们首先要编写一个可行的RESTful API,它可以跨客户端工作,而无需太多麻烦。imho,使用令牌作为数据的一部分更简单。如果将令牌作为头的一部分传递,您会遇到什么麻烦?事实上,大多数客户都同意在headerDid中使用令牌,你知道吗?
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'
           }]
});
$myValue1 = $_REQUEST ['data1'];
$myValue2 = $_REQUEST ['data2'];
$myValue3 = $_REQUEST ['dataN'];