2011-10-31 29 views
5

我正在研究PhoneGap應用程序,該應用程序使用相機捕獲圖像,並在稍後上載它們。 PhoneGap中有兩種相機操作模式:原始base64編碼數據或文件URI。讀取PhoneGap中的圖像捕獲文件

該文檔自己說:

注:使用相機上的新 設備拍攝的照片的成像質量相當不錯。使用Base64對這些圖像進行編碼已在某些設備(iPhone 4,BlackBerry Torch 9800)上導致了 內存問題。因此,使用FILE_URI作爲'Camera.destinationType'強烈推薦使用 。

所以我很想使用FILE_URI選項。這很好,你甚至可以在IMG標籤中顯示圖像。該URL看起來是這樣的:

文件://localhost/var/mobile/Applications/4FE4642B-944C-449BB-9BD6-1E442E47C7CE/tmp/photo_047.jpg

然而,在某些時候後來我想讀取文件的內容上傳到服務器。我打算使用FileReader類型來完成此操作。這不起作用,我認爲這是因爲我無法訪問上述URL的文件。

錯誤代碼我回來從readDataUrl是1>FileError.NOT_FOUND_ERR = 1;

任何想法如何,我可以得到的文件?我試着根據我看到的另一個樣本訪問路徑的最後部分(photo_047.jpg),但沒有運氣。

回答

1

我剛剛開始使用PhoneGap,並且考慮到此問題的年齡,您可能已經找到了答案,但無論如何我都會試一試。

首先,您是否可以使用內置的FileTransfer對象?它需要一個文件: URI作爲參數。

如果文件傳輸不會爲你工作,你需要自己讀取文件中的數據,您將需要的PhoneGap 文件對象,如的FileReader,如你所說。但大多數人希望一個普通的路徑名 - 而不是一個URI--來指定要使用的文件。你得到NOT_FOUND_ERR的原因是因爲它試圖打開一個名爲的文件:/ localhost/var ...

這裏有一個快速班輪從您的URI中提取路徑部分:

var path = /file:\/\/.*?(\/.*)/.exec(fileuri)[1];

希望這有助於!

1

jgarbers的回答對我有幫助,但並沒有解決問題。我意識到相機將照片存儲在Temp文件夾而不是Document文件夾中。將我的本地文件系統設置爲暫時允許它找到相機圖像的正確位置。

window.requestFileSystem(LocalFileSystem.TEMPORARY, 0, ... 
0

...

window.requestFileSystem(LocalFileSystem.TEMPORARY,0,...

...

VAR路徑= /文件:?。// (/)/ EXEC(fileURI所) [1];

價以上jgarbers和瑞克答案(溶液已經在IOS 7測試成功)

0

可以用戶上傳任何文件到服務器文件傳輸插件

01。
//// pass your file uri to the mediafie param 
function uploadFile(mediaFile) { 
    var ft = new FileTransfer(); 
    path = mediaFile.fullPath; 
    name = mediaFile.name; 
////your service method url 
    var objUrl = http://example.com; 


    ft.upload(path, 
     objUrl, 
     function (result) { 
      alert("Success"); 


     }, 
     function (error) { 
      alert('Error uploading file ' + path + ': ' + error.code); 
     }, 
     { fileName: name }); 
}