cordova FileTransfer返回错误,所有属性均为“null”

js81xvg6  于 2023-11-22  发布在  其他
关注(0)|答案(4)|浏览(191)

在我的Ionic 2应用程序中,我用cordova-plugin-camera拍照,我通过FILE_URL(本地设备的图像位置)检索图片,效果很好。
这给了我这样的URL时,与相机拍照:file:///storage/emulated/0/Android/....../1234.jpg
当从图库中选择一张图片时,就像这样:content://com.android.providers.media.documents/document/image%232312
现在我正在尝试使用cordova-plugin-file-transfer上传此图像。
我的上传功能如下:

upload(){
    let options: FileUploadOptions = {
        fileKey: 'file',
        fileName: 'my_image.jpg',
        headers: {'X-CSRF-Token': localStorage.getItem('u:token')}
    }
    alert(this.imageSrc);
    this.fileTransfer.upload(this.imageSrc, encodeURI(this.API_URL), options, true)
        .then(data => {
            alert("d:"+JSON.stringify(data));
        }, err => {
            alert("E:"+JSON.stringify(err));
        });
}

字符串
但是我收到一个错误对象,

{
  "code" : "null",
  "source" : "null",
  "target" : "null",
  "http_status" : "null",
  "body" : "null",
  "exception" : "null"
}

注意:没有额外的错误被抛出

1aaf6o9v

1aaf6o9v1#

编辑:

在我过去使用这个插件的地方,我通常会传入一个:

file:///Path/To/File/

字符串
或者类似的东西:

cdvfile://localhost/persistent/path/to/file.txt


你也可以像这样传入一个数据URI:

data:image/jpg;base64,iVBORw0KGgoAAA....


我看到你正在使用相机插件,你有没有尝试设置相机选项,以返回一个数据的URL和发送?

navigator.camera.getPicture(onSuccess, onFail,
{
    destinationType: Camera.DestinationType.DATA_URL;
});

原件

试着像这样构建你的选项:

var options = new FileUploadOptions();

options.fileKey =  'file',
options.fileName = 'my_image.jpg',
options.headers = {'X-CSRF-Token': localStorage.getItem('u:token')}


然后尝试像这样上传:

var ft = new FileTransfer();

ft.upload('file_url', 'endpoint_url', success_callback, fail_callback, options);

vd8tlhqk

vd8tlhqk2#

好吧,问题是Gallery返回了一个contentURI,而不是FileTransfer所需要的fileURI。问题发生在content:/storage/ URI上。
我使用了一个糟糕的实践解决方案,但由于它仍然没有修复,我将分享它。
我通过添加FilePathcordova-plugin-filepath)修复了它。
下面的函数使用存储和内容URI,并将它们转换为文件路径。
(图片来源:global in my case)

convertIfAndroidGalleryImage() {
        // android bug, sometimes returns an image starting with content: or /storage/ which won't upload. 
        // Convert to a filepath.
        if(this.imageSrc.startsWith('content') || this.imageSrc.startsWith('/storage/')) {
            if(this.imageSrc.startsWith('/storage/')) {
                this.imageSrc = 'file://'+this.imageSrc;
            }
            this.filePath.resolveNativePath(this.imageSrc).then(filePath => {
                this.imageSrc = filePath;

            }).catch(err => { console.log("error occurred"); });
        }
    }

字符串

628mspwn

628mspwn3#

当我在离子视图中测试应用程序时,我也遇到了同样的问题,但在我创建apk后,问题消失了,没有错误出现。

uhry853o

uhry853o4#

我有同样的问题,问题是,上传网址格式不好,我把正确的网址,它为我工作.

相关问题