使用ngCordova在Android 6(API 23)上发送FileTransfer权限问题

时间:2016-09-09 17:55:18

标签: cordova cordova-plugins ngcordova

问题/问题:

我在执行以下操作时收到权限错误:

(注意:我尝试过使用videoData[0].fullPathvideoData[0].localURLvideoData[0].toURL(),就像我建议的对我没有意义的文档一样,但都没有成功。)

$cordovaCapture.captureVideo(options).then(function(videoData) {
    // Video Captures works, however when I try to upload I get permission error below.
    $cordovaFileTransfer.upload(baseUrl + '/api/users/upload', videoData[0].fullPath, options, true)
        .then(function(result) {
            // this never triggers
        }, function(err) {
            // here I get permission open failed:EACCES (Permission denied)
            $scope.debug= err;
        });
});

我在这里错过了一步吗?我测试了我的API,它在使用Postman时处理上传很好。我希望它能提示我使用新的权限模型来询问我是否希望它允许它访问我的存储,但它永远不会实现这一点。

感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

我尝试过相同的功能,它在android 6.0中运行良好

  1. 安装最新的cordova-plugin-file-transfer(1.5.1版本)

  2. 在您的代码中,您传递相同的选项以捕获并上传。尝试更改选项。 请参阅https://www.npmjs.com/package/cordova-plugin-file-transfer

      fileTransferOptions = {
             'fileKey'   : 'files',
             'fileName'  : FILE_NAME,
            'chunkedMode': false
        }
    
     $cordovaFileTransfer.upload(serverUrl, videoData[0].fullPath, fileTransferOptions)
                .then(function (data) {
                    console.log('success');
                }, function (err) {console.log('error', err)});
    
  3. 如果未提示存储权限,则不会启用权限。 (您可以添加额外的Java代码以便始终允许存储访问)现在,您可以通过移动设置打开存储权限 - >应用 - >转到所选应用并单击权限,打开存储访问权限。

  4. 检查要上传文件的serverUrl是否正确。

  5. 将服务器网址列入白名单。

    <acess origin="YOUR_SERVER_URL"/>' /*Network accesss enable*/ <access origin="http://*/*"/>
    <access origin="https://*/*"/>