This repository has been archived on 2019-05-05. You can view files and clone it, but cannot push or open issues or pull requests.

7.5 KiB
Raw Blame History

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

Эти примечания предназначены прежде всего для 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));
}