2013-12-18 58 views
2

外部媒體,我得到的文件就OK了,但是,試圖將該文件轉換爲blobread()給空:鈦的Android file.read()返回null從意圖

Q )我怎樣才能得到這個文件的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())); 
      } 
     } 
    }); 

產地:

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 

回答

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(); 
0

謝謝,謝謝,謝謝戴夫,已經在這兩天了,現在這保存了我的剩餘頭髮。

我沒有足夠的積分留下評論,因此再次回答時提出了幾個可能可以幫助他人的關鍵點,因爲他們似乎沒有明確記錄。

上面的答案解決了當您嘗試在下載中讀取文件時出現混淆的錯誤消息。該系統似乎認爲它已經是一個blob,而不是一個文件句柄,就像這樣:

var pdf = Ti.Filesystem.getFile(intent.getData()); 
pdf = pdf.read(); 
if(pdf.exists()){ 
    //do something 
} 

給控制檯消息像

方法不支持org.appcelerator.titanium.io.TitaniumBlob :閱讀

方法不支持org.appcelerator.titanium.io.TitaniumBlob:存在

戴夫的建議也適用於開文件(在我的情況下PDF)從下載或從郵件使用intent.getData(),回到這些資源的URI。

此外,它可以幫助把:

Ti.Filesystem.requestStoragePermissions(callback); 

在你的代碼早地方,如果你想訪問通用文件存儲。缺乏這將導致持續的權限被拒絕的錯誤。

相關問題