我正在使用 cordova 文件传输将图像上传到服务器。问题是 cordova 文件传输总是抛出错误代码 1。之前还可以用,今天突然就不行了。
我没有看到服务器上收到任何参数选项值。 我的代码
savebase64AsImageFile(folderpath,filename,realData,dataType,q).then(function (success){
console.log(success);
$cordovaFile.checkFile(folderpath, filename).then(function (success) {
console.log(success);
success.getMetadata(function(metadata) {
console.log('meta size2 ' +metadata.size);
});
}, function (error) {
});
$scope.data.image = filename;
$cordovaFileTransfer.upload(encodeURI(server), filePath, options, true).then(function(result) {...
我已经使用 $cordovaFile.checkFile 检查以确保该文件存在。 和选项
var options ={
fileName: filename,
chunkedMode: true,
params:{'user_id' : $scope.data.userid},
headers:{Connection: 'close'}
};
在我的服务器上,我使用 Laravel 但 $request 数据为空,我无法访问文件或 user_id。
对于文件夹路径我正在使用这个
var folderpath = cordova.file.dataDirectory;
var filePath = folderpath + filename;
filepath 将返回文件位置
文件:///data/user/0/com.ionicframework.test3829076/files/PV5xo1506004208779.jpg
我正在 Android 设备上测试这个
状态 409 是我在请求为空时给出的数字
知道是什么原因导致这个错误吗? 这部分代码以前一直有效。
根据文档,您的参数是相反的。它是上传(文件路径、服务器等)
尝试不使用选项上传或使用
var options ={
fileName: filename,
chunkedMode: false,
params:{'user_id' : $scope.data.userid},
headers:{Connection: 'close'}
};
代码 1 可能是访问问题。 就我而言,文件权限存在问题。 如果您使用的 sdk 版本低于 29 (android 10),您必须强制用户授予读取权限
const filesPermissions = (permissions) => [
permissions.READ_EXTERNAL_STORAGE,
permissions.WRITE_EXTERNAL_STORAGE,
];
const checkFilesPermissions = async () => {
const { permissions } = window.cordova.plugins;
return Promise.all(filesPermissions(permissions).map(permission => {
return new Promise((resolve, reject) => permissions.checkPermission(permission, resolve, reject));
})).then(statuses => statuses.every(status => status.hasPermission));
};
const requestFilesPermissions = async () => {
const { permissions } = window.cordova.plugins;
return new Promise((resolve, reject) => {
permissions.requestPermissions(filesPermissions(permissions), resolve, reject);
}).then(status => status.hasPermission);
};
// onClickHandler:
if (deviceService.isAndroidPlatform()) {
try {
let hasFilesPermissions = await checkFilesPermissions();
console.log(hasFilesPermissions, 1);
if (!hasFilesPermissions) {
hasFilesPermissions = await requestFilesPermissions();
console.log(hasFilesPermissions, 2);
}
if (!hasFilesPermissions) {
throw new Error('There is no permissions to download files. Please enable it in system preferences');
}
} catch (error) {
alert(error.message)
}
}
// 然后像往常一样使用 cordova-plugin-file-transfer 上传文件
注意:您必须在 AndroidManifest.xml 中启用 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE