Примечания для разработчиков плагинов

Эти примечания предназначены прежде всего для Android и iOS разработчиков, которые хотят писать плагины какой интерфейс с файловой системой, с помощью файла плагина.

Работа с Кордова файловой системы URL

Начиная с версии 1.0.0, этот плагин использует URL-адресов с cdvfile схема для всех коммуникации через мост, а не подвергая пути файловой системы raw устройства для JavaScript.

На стороне JavaScript это означает, что объекты DirectoryEntry и FileEntry fullPath атрибут, который является по отношению к корневой файловой системе HTML. Если ваш плагин JavaScript API принимает объект DirectoryEntry или FileEntry, необходимо вызвать .toURL() для этого объекта перед передачей их через мост в машинный код.

Преобразование cdvfile: / / URL-адреса в пути fileystem

Плагины, которые нужно написать в файловой системе может потребоваться преобразовать URL-адреса системы полученный файл в место фактической файловой системы. Существует несколько способов сделать это, в зависимости от родной платформе.

Важно помнить, что не все cdvfile:// URL-адреса являются отображаемыми файлами на устройстве. Некоторые URL может относиться к активам на устройстве, которые не представлены файлы, или может даже обратиться к удаленным ресурсам. Из-за эти возможности плагины следует всегда проверять ли они получают результат обратно при попытке преобразовать URL-адреса в пути.

Android

На 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

Кордова на 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

В 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));
}