Эти примечания предназначены прежде всего для Android и iOS разработчиков, которые хотят писать плагины какой интерфейс с файловой системой, с помощью файла плагина.
Начиная с версии 1.0.0, этот плагин использует URL-адресов с cdvfile
схема для всех коммуникации через мост, а не подвергая пути файловой системы raw устройства для JavaScript.
На стороне JavaScript это означает, что объекты DirectoryEntry и FileEntry fullPath атрибут, который является по отношению к корневой файловой системе HTML. Если ваш плагин JavaScript API принимает объект DirectoryEntry или FileEntry, необходимо вызвать .toURL()
для этого объекта перед передачей их через мост в машинный код.
Плагины, которые нужно написать в файловой системе может потребоваться преобразовать URL-адреса системы полученный файл в место фактической файловой системы. Существует несколько способов сделать это, в зависимости от родной платформе.
Важно помнить, что не все cdvfile://
URL-адреса являются отображаемыми файлами на устройстве. Некоторые URL может относиться к активам на устройстве, которые не представлены файлы, или может даже обратиться к удаленным ресурсам. Из-за эти возможности плагины следует всегда проверять ли они получают результат обратно при попытке преобразовать URL-адреса в пути.
На Android, самый простой способ для преобразования cdvfile://
URL-адрес к пути файловой системы заключается в использовании cordova-plugin-CordovaResourceApi
. CordovaResourceApi
Есть несколько методов, которые можно обработать cdvfile://
URL-адреса:
// webView is a member of the Plugin class
CordovaResourceApi resourceApi = webView.getResourceApi();
// Obtain a file:/// URL representing this file on the device,
// or the same URL unchanged if it cannot be mapped to a file
Uri fileURL = resourceApi.remapUri(Uri.parse(cdvfileURL));
Это также можно использовать плагин файл непосредственно:
import cordova-plugin-file.FileUtils;
import cordova-plugin-file.FileSystem;
import java.net.MalformedURLException;
// Get the File plugin from the plugin manager
FileUtils filePlugin = (FileUtils)webView.pluginManager.getPlugin("File");
// Given a URL, get a path for it
try {
String path = filePlugin.filesystemPathForURL(cdvfileURL);
} catch (MalformedURLException e) {
// The filesystem url wasn't recognized
}
Для преобразования пути к cdvfile://
URL-адрес:
import cordova-plugin-file.LocalFilesystemURL;
// Get a LocalFilesystemURL object for a device path,
// or null if it cannot be represented as a cdvfile URL.
LocalFilesystemURL url = filePlugin.filesystemURLforLocalPath(path);
// Get the string representation of the URL object
String cdvfileURL = url.toString();
Если ваш плагин создает файл, и вы хотите вернуть объект FileEntry для него, используйте файл плагина:
// Return a JSON structure suitable for returning to JavaScript,
// or null if this file is not representable as a cdvfile URL.
JSONObject entry = filePlugin.getEntryForFile(file);
Кордова на iOS не использовать те же CordovaResourceApi
понятие, как Android. На iOS вы должны использовать файл плагин для преобразования URL-адреса и пути файловой системы.
// Get a CDVFilesystem URL object from a URL string
CDVFilesystemURL* url = [CDVFilesystemURL fileSystemURLWithString:cdvfileURL];
// Get a path for the URL object, or nil if it cannot be mapped to a file
NSString* path = [filePlugin filesystemPathForURL:url];
// Get a CDVFilesystem URL object for a device path, or
// nil if it cannot be represented as a cdvfile URL.
CDVFilesystemURL* url = [filePlugin fileSystemURLforLocalPath:path];
// Get the string representation of the URL object
NSString* cdvfileURL = [url absoluteString];
Если ваш плагин создает файл, и вы хотите вернуть объект FileEntry для него, используйте файл плагина:
// Get a CDVFilesystem URL object for a device path, or
// nil if it cannot be represented as a cdvfile URL.
CDVFilesystemURL* url = [filePlugin fileSystemURLforLocalPath:path];
// Get a structure to return to JavaScript
NSDictionary* entry = [filePlugin makeEntryForLocalURL:url]
В JavaScript, чтобы получить cdvfile://
URL от объекта DirectoryEntry или FileEntry, просто позвоните .toURL()
на него:
var cdvfileURL = entry.toURL();
В плагин обработчики ответ для преобразования из возвращаемой структуры FileEntry объект фактического вступления, код обработчика следует импортировать файл плагина и создайте новый объект:
// create appropriate Entry object
var entry;
if (entryStruct.isDirectory) {
entry = new DirectoryEntry(entryStruct.name, entryStruct.fullPath, new FileSystem(entryStruct.filesystemName));
} else {
entry = new FileEntry(entryStruct.name, entryStruct.fullPath, new FileSystem(entryStruct.filesystemName));
}