J'ai vu des articles concernant l'accès aux fichiers sur un ordinateur client via une page Web, à savoir this question .
J'essaie d'utiliser le paradigme de la "mise à jour continue dans le cloud" pour certains algorithmes que j'écris afin que mes utilisateurs puissent accéder aux dernières versions en accédant simplement à la page Web. Cela nécessite que le programme/la page Web puisse commencer par un répertoire et inspecter de manière récursive les fichiers qu'il contient et calculer les résultats en fonction de ce qui est trouvé. En fin de compte, il devrait également être capable d'écrire le fichier de résultats sur le système de fichiers du client.
L'une des réponses à la question précédente mentionne Google Gears mais a depuis été abandonné au profit de HTML5 . L'accès à un répertoire client est-il possible dans HTML5? Comment?
Je sais pourquoi l'accès d'une page Web à des fichiers locaux est un risque pour la sécurité, mais je n'ai aucun problème à demander à l'utilisateur les autorisations appropriées.
Non, pas directement au moins. Cependant, vous avez un certain nombre de choix ici.
Actuellement, vos meilleurs choix sont:
multiple
pour lire et ouvrir plusieurs fichiers à la fois sans avoir à disposer de champs distincts.Chrome 6 prendra également en charge l’API de fichier.
Comme mentionné précédemment, les API FileSystem _ et File , ainsi que l'API FileWriter , peuvent être utilisées pour lire et écrire des fichiers à partir du contexte d'un onglet de navigateur/fenêtre vers un ordinateur client.
Il y a plusieurs choses relatives aux API FileSystem et FileWriter dont vous devez être conscient, certaines d'entre elles ont été mentionnées, mais méritent d'être répétées:
Voici des exemples simples de la façon dont les API sont utilisées, directement et indirectement, pour réaliser ces tâches:
Ecrire le fichier:
bakedGoods.set({
data: [{key: "testFile", value: "Hello world!", dataFormat: "text/plain"}],
storageTypes: ["fileSystem"],
options: {fileSystem:{storageType: Window.PERSISTENT}},
complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});
Lire le fichier:
bakedGoods.get({
data: ["testFile"],
storageTypes: ["fileSystem"],
options: {fileSystem:{storageType: Window.PERSISTENT}},
complete: function(resultDataObj, byStorageTypeErrorObj){}
});
Utilisation des API Raw File, FileWriter et FileSystem
Ecrire le fichier:
function onQuotaRequestSuccess(grantedQuota)
{
function saveFile(directoryEntry)
{
function createFileWriter(fileEntry)
{
function write(fileWriter)
{
var dataBlob = new Blob(["Hello world!"], {type: "text/plain"});
fileWriter.write(dataBlob);
}
fileEntry.createWriter(write);
}
directoryEntry.getFile(
"testFile",
{create: true, exclusive: true},
createFileWriter
);
}
requestFileSystem(Window.PERSISTENT, grantedQuota, saveFile);
}
var desiredQuota = 1024 * 1024 * 1024;
var quotaManagementObj = navigator.webkitPersistentStorage;
quotaManagementObj.requestQuota(desiredQuota, onQuotaRequestSuccess);
Lire le fichier:
function onQuotaRequestSuccess(grantedQuota)
{
function getfile(directoryEntry)
{
function readFile(fileEntry)
{
function read(file)
{
var fileReader = new FileReader();
fileReader.onload = function(){var fileData = fileReader.result};
fileReader.readAsText(file);
}
fileEntry.file(read);
}
directoryEntry.getFile(
"testFile",
{create: false},
readFile
);
}
requestFileSystem(Window.PERSISTENT, grantedQuota, getFile);
}
var desiredQuota = 1024 * 1024 * 1024;
var quotaManagementObj = navigator.webkitPersistentStorage;
quotaManagementObj.requestQuota(desiredQuota, onQuotaRequestSuccess);
Étant donné les statuts actuels des API FileSystem et FileWriter, leur utilisation pour lire et écrire des fichiers ne constitue pas actuellement un "moyen HTML5" de réaliser ces tâches.
Le regain d'intérêt pour les API des éditeurs de navigateurs non implémentés peut toutefois les replacer directement dans la voie des normes. Cela, combiné à la forte pénétration des navigateurs basés sur Chromium sur le marché et au fait que Google (le principal contributeur à Chromium) n’a pas donné de date de fin de vie aux API, devrait suffire à justifier leur utilisation dans certains cas.
* BakedGoods est maintenu par nul autre que ce mec ici :)