2011-10-31 28 views
5

Tôi đang làm việc trên ứng dụng PhoneGap chụp ảnh bằng camera và sau đó tải chúng lên. Có hai chế độ hoạt động cho máy ảnh trong PhoneGap: dữ liệu được mã hóa base64 thô hoặc URI tệp.Đọc các tệp chụp ảnh trong PhoneGap

Các tài liệu mình nói:

Lưu ý: Chất lượng hình ảnh của hình ảnh được chụp bằng máy ảnh trên thiết bị mới là khá tốt. Việc mã hóa các hình ảnh như vậy bằng Base64 đã gây ra các sự cố bộ nhớ trên một số thiết bị này (iPhone 4, BlackBerry Torch 9800). Do đó, việc sử dụng FILE_URI vì 'Camera.destinationType' là được khuyến nghị.

Vì vậy, tôi rất muốn sử dụng tùy chọn FILE_URI. Điều này làm việc tuyệt vời và thậm chí bạn có thể hiển thị hình ảnh trong thẻ IMG. URL trông như thế này:

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

Tuy nhiên, tại một số điểm sau này tôi muốn đọc nội dung của tệp để tải lên máy chủ. Tôi sẽ làm điều này bằng cách sử dụng loại FileReader. Điều này không hiệu quả và tôi nghĩ đó là vì tôi không thể truy cập tệp tại URL ở trên.

Mã lỗi tôi nhận lại từ readDataUrl là 1>FileError.NOT_FOUND_ERR = 1;

Bất kỳ ý tưởng làm thế nào tôi có thể nhận được các tập tin? Tôi đã thử truy cập phần cuối của con đường (photo_047.jpg) dựa trên một mẫu khác mà tôi thấy nhưng không may mắn.

Trả lời

1

Tôi chỉ mới bắt đầu với PhoneGap và cho độ tuổi của câu hỏi này bạn có thể đã tìm thấy câu trả lời rồi, nhưng tôi sẽ thử.

Trước tiên, bạn có thể sử dụng đối tượng được tích hợp sẵn trong đối tượng FileTransfer không? Phải có một tệp : URI làm đối số.

Nếu FileTransfer sẽ không làm việc cho bạn, và bạn cần phải đọc dữ liệu tập tin bản thân, bạn sẽ cần PhoneGap file đối tượng, như FileReader, như bạn nói. Nhưng hầu hết những người mong đợi một tên đường dẫn đơn giản - không phải là một URI - để xác định các tập tin để làm việc với. Lý do bạn nhận được NOT_FOUND_ERR là vì nó đang cố mở một tệp có tên là tệp:/localhost/var ....

Dưới đây là một cách nhanh chóng một lót để trích xuất các phần đường đi từ URI của bạn:

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

Hope this helps!

1

Câu trả lời từ jgarbers đã giúp tôi nhưng nó không giải quyết được vấn đề. Tôi nhận ra rằng máy ảnh lưu trữ ảnh trong thư mục Temp thay vì thư mục Tài liệu. Đặt hệ thống tệp cục bộ của tôi thành tạm thời cho phép nó tìm vị trí chính xác cho hình ảnh của máy ảnh.

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

...

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

...

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

Ref jgarbers trên và Rik câu trả lời (giải pháp đã được thử nghiệm thành công trên iOS 7)

0

bạn có thể sử dụng các plugin chuyển tập tin để tải lên bất kỳ tập tin đến máy chủ

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 }); 
} 
Các vấn đề liên quan