Titanium Android file.read()从intent返回外部媒体的null

Dav*_*ave 2 blob file external titanium android-intent

当我调用图库意图时,我得到文件正常,但尝试将该文件转换为blobwith read()给出null:

问)我如何获得此文件的blob?

码:

    var intent = Ti.Android.createIntent({ action : Ti.Android.ACTION_PICK, type : "image/*" });            
    intent.addCategory(Ti.Android.CATEGORY_DEFAULT);
    win.getActivity().startActivityForResult(intent, function(e) { 
        if (e.error) { 
            alert(e.error);
        } 
        else {
            if (e.resultCode === Titanium.Android.RESULT_OK) {                  
                var file = Ti.Filesystem.getFile(e.intent.data);

                console.log('intentdata: ' + e.intent.data);
                console.log('file: ' + JSON.stringify(file));
                console.log('file read result: ' + JSON.stringify(file.read()));
            } 
        }
    }); 
Run Code Online (Sandbox Code Playgroud)

生产:

I/TiAPI   ( 2897):  intentdata: content://media/external/images/media/59
I/TiAPI   ( 2897):  file: {"readonly":true,"bubbleParent":true,"writable":false,"directoryListing":null,"symbolicLink":false,"h
idden":false,"nativePath":"content://media/external/images/media/59","executable":false,"size":0,"name":"butterfly2_large1.jpg"
,"parent":null}
I/TiAPI   ( 2897):  file read result: null
Run Code Online (Sandbox Code Playgroud)

Dav*_*ave 6

我发现在尝试将其作为blob之前,您需要将文件复制到applicationDataDirectory.

var intentFile = Ti.Filesystem.getFile(e.intent.data);          
var copiedFile = Ti.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory, intentFile.name);                            
intentFile.copy(copiedFile.nativePath);                         
var blob = copiedFile.read();
Run Code Online (Sandbox Code Playgroud)