2015-07-21 18 views
13

Tôi có ứng dụng Cordova/PhoneGap sử dụng máy ảnh để chụp ảnh. Tôi cần truy cập vào hình ảnh này để gửi tới máy chủ của tôi.Cách truy cập hình ảnh từ URI gốc (tài sản-thư viện) trong Cordova cho iOS

Đối với Android, tôi chỉ cần sử dụng $cordovaFile.readAsDataURL(cordova.file.dataDirectory, fileName)

Tuy nhiên; trên iOS tên tệp không quay lại như vậy. giá trị trả về của tôi dành cho iOS cho thấy con đường như

tài sản thư viện: //asset/asset.JPG id = 539425FE-43AA-48E7-9865-D76348208AC7 & ext = JPG

thế nào có thể Tôi truy cập và đọc hình ảnh này? Tôi muốn gắn bó với $ cordovaFile nhưng chỉ muốn làm cho nó hoạt động.

Tôi đang sử dụng CordovaCameraPreview plugin và tốt nhất tôi có thể lấy lại từ bộ xử lý hình ảnh taker có vẻ là một cái gì đó hình thành tương tự như:

tài sản thư viện: //asset/asset.JPG id = 990355E1 -200A-4E35-AAA1-7D461E3999C8 & ext = JPG tài sản thư viện: //asset/asset.JPG id = C49FF0EB-CCCB-45B2-8577-B13868D8DB29 & ext = JPG

Làm thế nào tôi có thể chuyển đổi này vào một tên tệp và đường dẫn mà tôi có thể đọc bằng $ cordovaFile? Theo tài liệu của họ (http://ngcordova.com/docs/plugins/file/) có vẻ như tôi cần sử dụng một trong các đường dẫn của họ cho Bố cục hệ thống tệp. Nó hoạt động tốt trên Android bằng cách sử dụng cordova.file.dataDirectory nhưng không thể tìm ra cách truy cập trên iOS

Tôi cũng đã thử sử dụng window.resolveLocalFileSystemURL(path) nhưng tôi nhận được không xác định là kết quả của mình.

Cập nhật

tôi cảm thấy như tôi nhận được gần hơn ... sử dụng window.resolveLocalFileSystemURL(path,resolveOnSuccess, resOnError); tôi nhận được thêm thông tin

name: "assets-library" 
fullPath: "/asset/asset.JPG?id=711B4C9D-97D6-455A-BC43-C73059A5C3E8&ext=JPG" 
name: "asset.JPG?id=711B4C9D-97D6-455A-BC43-C73059A5C3E8&ext=JPG" 
nativeURL: "assets-library://asset/asset.JPG?id=711B4C9D-97D6-455A-BC43-C73059A5C3E8&ext=JPG" 

Dường như bây giờ tôi cần phải sử dụng fullpath nhưng vẫn không thể tìm hiểu cách truy cập bằng $ cordovaFile

Nếu tôi cố gắng sử dụng $cordovaFile.readAsDataURL(cordova.file.dataDirectory, data.name) trong đó data.name là asset.JPG? id = 711B4C9D-97D6-455A-BC43-C73059A5C3E8 & ext = JPG tôi nhận được một tập tin không tìm thấy lỗi

Cập nhật 2

Tôi đã cố gắng sử dụng tất cả các tập tin đơn Hệ thống Giao diện có sẵn tại http://ngcordova.com/docs/plugins/file/ và nhận cùng File Not Found lỗi trên mỗi một. Vẫn không biết cách truy cập tệp trong thư viện tài sản bằng cách sử dụng $ cordovaFile

Trả lời

7

Tôi đã vật lộn với một vấn đề tương tự trong một thời gian, nhưng tôi đã tìm ra nó ngay hôm nay. Tôi cũng nghĩ rằng các API của FileSystem không hoạt động với các URI assets-libary:// - nhưng điều đó không đúng.

Bạn sẽ có thể để có được quyền truy cập vào các đối tượng File (cũng như tên hình ảnh thực tế) bằng cách sử dụng đoạn mã sau:

resolveLocalFileSystemURL('assets-library://asset/asset.JPG?id=711B4C9D-97D6-455A-BC43-C73059A5C3E8&ext=JPG', function(fileEntry) { 
    fileEntry.file(function(file) { 
     var reader = new FileReader(); 
     reader.onloadend = function(event) { 
      console.log(event.target.result.byteLength); 
     }; 
     console.log('Reading file: ' + file.name); 
     reader.readAsArrayBuffer(file); 
    }); 
}); 
+0

Kính gửi Danjarvis, Tôi cũng đang gặp phải sự cố tương tự với plugin camerapreview. Bạn có thể vui lòng cho tôi biết liệu bạn có thể tải tệp lên bằng tệp đầu ra từ phương thức trên hay không? Url đầu ra trông như thế này, cdvfile: //localhost/assets-library/asset/asset.JPG? Id = F0D3E4F4-366C-4C27-A158-937CA7805C87 & ext = JPG –

+0

Nếu bạn chỉ đang cố chuyển đổi nội dung-thư viện: // URL đến đường dẫn CDVFile, bạn có thể gọi sau đây trên đối tượng fileEntry được trả về bởi resolveLocalFileSystemURL: 'fileEntry.toInternalURL()' – jcaruso

9

Tôi đã thành công với một thay thế đơn giản, như thế này

fullPath = fullPath.replace("assets-library://", "cdvfile://localhost/assets-library/") 

Nó hoạt động trong iOS 9.3

+0

Trình tiết kiệm cuộc sống! Điều này trở nên có liên quan đối với tôi khi tôi muốn sử dụng địa chỉ cho một thẻ ''. Nó được sử dụng để làm việc hoàn hảo với Cordova-iOS <4 nhưng kể từ khi Cordova 6/Cordova-iOS 4 nó ngừng hoạt động. Với mã của bạn, mọi thứ trở lại bình thường trở lại. :) – horstwilhelm

+0

Nó cũng làm việc cho chúng tôi trên iOS 10.2 bằng cách sử dụng cordova-ios 4.3.1 – rbarriuso

+0

Hãy để tôi chỉ ra rằng nó cần thiết để thêm '$ compileProvider.imgSrcSanitizationWhitelist (/^\ s * (https? | File | blob | cdvfile | content): | dữ liệu: hình ảnh /); 'trong giai đoạn cấu hình của ứng dụng để hiển thị hình ảnh trực tiếp trên màn hình – rbarriuso

Các vấn đề liên quan