I want to write file in user directory
Non è possibile scrivere direttamente sul file system dell'utente.
Dopo aver cercato SO domande simili a risolvere con precisione domanda, era in grado di $ cat
contenuto del file creato in plnkr seguono questo answer inviato da @Iain a Where does PERSISTENT file system storage store with chrome?. Il file è stato scritto nel file system dell'utente nella directory ~/.config/[chrome, chromium]
.
file manager servono per navigare
~/.config/[chrome, chromium]/Default/File System
di rivedere la directory; il file contenente il testo scritto sotto, è stato trovato in una cartella con due cifre come nome di cartella, quindi all'interno di altre due sottodirectory; una sottodirectory con una singola lettera minuscola come nome della cartella; all'interno di questa sottodirectory c'era un'altra sottodirectory con due cifre come nome della cartella; il file che è stato scritto da window.webkitRequestFileSystem
aveva otto cifre come nome di file, senza un'estensione, pur avendo corretto il tipo MIME "text/plain"
; impostato su Blob
type
proprietà.
Poi alla terminal
$ cd ~/.config/[chrome, chromium]/Default/File\ System/[three digits]/[lowercase letter]/[two digits]
$ cat [eight digits]
Lorem Ipsum
Non ho provato a creare un file .sh
ed eseguirlo. Probabilmente sarà necessario posizionare la directory in path
o spostare il file in una cartella esistente path
; impostare appropriato permissions
per il file. Potrebbe eventualmente regolarlo alle impostazioni del browser cromo/cromo, anche se non ho provato neanche questo.
Probabilmente si potrebbe scrivere un comando per copiare o spostare il file a /path/to/file
in una cartella in path
ed eseguire il file; o altro approccio.
È possibile utilizzare l'attributo download
di a
elemento per consentire il download di file creato da createWriter
al file system utente.
The file system is sandboxed
Because the file system is sandboxed, a web app cannot access another app's files. You also cannot read or write files to an arbitrary folder (for example, My Pictures and My Documents) on the user's hard drive.
vedi anche Definititons
persistent storage Persistent storage is storage that stays in the browser unless the user expunges it or the app deletes it.
temporary storage Transient storage is available to any web app. It is automatic and does not need to be requested, but the browser can delete the storage without warning.
I want to write file in user directory because it has to be user understandable.
Modifica, aggiornato
È possibile utilizzare il metodo sopra descritto.Cioè, usare un file manager a rivedere come le cartelle ei file vengono visualizzati in
~/.config/[chrome, chromium]/Default/File System
## do stuff with contents of file written by `window.requestFilesystem`
Per visualizzare file in cromo/cromo FileSystem
sarà possibile passare a DevTools
->Experiments
-> controllare FileSystem inspection
, log.txt
dovrebbe essere elencato alla scheda Resources
allo FileSystem
.
può anche passare a depositare presso la barra degli indirizzi utilizzando URL
filesystem:http://run.plnkr.co/temporary/log.txt
che dovrebbe avere contenuti
Lorem Ipsum
o
filesystem:http://run.plnkr.co/temporary/
per visualizzare tutti i file e le directory nella radice di temporanea filesystem
Vedi Exploring the FileSystem API
Primo lancio cromo/cromo con --allow-file-access-from-files
flag, vedere How do I make the Google Chrome flag "--allow-file-access-from-files" permanent?.
Successivo
window.requestFileSystem = window.requestFileSystem
|| window.webkitRequestFileSystem;
occupa delle
function errorHandler(e) {
var msg = '';
switch (e.message) {
case FileError.QUOTA_EXCEEDED_ERR:
msg = 'QUOTA_EXCEEDED_ERR';
break;
case FileError.NOT_FOUND_ERR:
msg = 'NOT_FOUND_ERR';
break;
case FileError.SECURITY_ERR:
msg = 'SECURITY_ERR';
break;
case FileError.INVALID_MODIFICATION_ERR:
msg = 'INVALID_MODIFICATION_ERR';
break;
case FileError.INVALID_STATE_ERR:
msg = 'INVALID_STATE_ERR';
break;
default:
msg = 'Unknown Error';
break;
};
console.log('Error: ' + msg);
}
si dovrebbe quindi essere in grado di
function writeFile(fs) {
fs.root.getFile('log.txt', {create: true}, function(fileEntry) {
// Create a FileWriter object for our FileEntry (log.txt).
fileEntry.createWriter(function(fileWriter) {
fileWriter.onwriteend = function(e) {
console.log('Write completed.');
// call `readFile` here
window.requestFileSystem(window.TEMPORARY, 1024*1024, readFile, errorHandler);
};
fileWriter.onerror = function(e) {
console.log('Write failed: ' + e.toString());
};
// Create a new Blob and write it to log.txt.
var blob = new Blob(['Lorem Ipsum'], {type: 'text/plain'});
fileWriter.write(blob);
}, errorHandler);
}, errorHandler);
}
window.requestFileSystem(window.TEMPORARY, 1024*1024, writeFile, errorHandler);
function readFile(fs) {
fs.root.getFile('log.txt', {}, function(fileEntry) {
// Get a File object representing the file,
// then use FileReader to read its contents.
fileEntry.file(function(file) {
var reader = new FileReader();
reader.onloadend = function(e) {
console.log(e.target.result)
};
reader.readAsText(file);
}, errorHandler);
}, errorHandler);
}
plnkr errore aggiuntivo http://plnkr.co/edit/EVVNYYUvHiM545T06kMC?p=preview
Nota, in Chrome 38+ è anche possibile creare un oggetto File
utilizzando il costruttore new File()
; vedi Chrome: Create file input from blob with Javascript?.
No, It is background process, save the data into the file exist in folder.
Questo approccio, inoltre, non verrà automaticamente creato il file creato in una cartella esistente sul file system dell'utente.
Con entrambi gli approcci, è necessario l'intervento dell'utente per salvare il file nel file system dell'utente. Ciò può essere ottenuto utilizzando l'attributo download
all'elemento a
, data URI
How to export JavaScript array info to csv (on client side)? o un elemento iframe
Download File Using Javascript/jQuery; che dovrebbe richiedere all'utente di selezionare per salvare il file o non salvare il file.
Vedi anche The FileSaver interface, FileSaver.js
Qualsiasi errore gettato? Ed è desktop chrome.v13 o +? – choz
Nessun errore ma il file non è stato creato anche console.log non viene visualizzato nulla. La versione di Chrome è 45 –
@BhumiShah È necessario richiedere all'utente di scaricare il file creato? – guest271314