Cordova 文件传输上传错误代码1

问题描述 投票:0回答:3

我正在使用 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 是我在请求为空时给出的数字

知道是什么原因导致这个错误吗? 这部分代码以前一直有效。

android angularjs ionic-framework cordova-plugins ngcordova
3个回答
0
投票

根据文档,您的参数是相反的。它是上传(文件路径、服务器等)

https://www.npmjs.com/package/cordova-plugin-file-transfer


0
投票

尝试不使用选项上传或使用

var options ={
    fileName: filename,
    chunkedMode: false,
    params:{'user_id' : $scope.data.userid},
    headers:{Connection: 'close'}
};

0
投票

代码 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

© www.soinside.com 2019 - 2024. All rights reserved.