Javascript 带参数的角度文件上传
我使用以下方法将文件上载到API: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/
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'];