2011-05-09 5 views
10

hay muchos ejemplos de lectura de archivos locales usando html5 pero al elegir de la lista de archivos, mi problema es que quiero crear el objeto de archivo manualmente, piense que tengo un archivo con el enlacecómo crear/inicializar el objeto de archivo utilizando la ruta de archivo html5

file:///G:/Users/txt.txt 

quiero el navegador para abrirlo,

creo que tiene que presentar f=new File('file:///G:/Users/txt.txt');

mi pregunta es cómo crear/inicializar el objeto de archivo utilizando la ruta del archivo? !

+1

No me sorprendería si esto no fuera posible debido a las diferencias del sistema de archivos (convención UNIX vs. Win etc.) y la seguridad. Ciertamente no me gustaría que mi navegador anule algún archivo mío sin que yo lo sepa. :) –

+0

desarrollo de aplicaciones móviles usando html5, tratando de guardar algunos datos en la tarjeta SD y recuperarlos nuevamente – Yahia

+0

Creo que podría ser más fácil para usted confiar en localStorage. Ver http://dev.w3.org/html5/webstorage/. –

Respuesta

2

Realmente no hay forma de crear un archivo sin permiso del usuario. Un botón o algo tendrá que ser presionado. Debería crear un dato: uri para que se guarde. Puede encontrar más información usando una búsqueda en la web o visitando http://en.wikipedia.org/wiki/Data_URI_scheme (no es una fuente completa pero puede mostrar lo que es posible). Esto es muy limitado dependiendo del teléfono y el sistema operativo. Los URI de datos son limitados mientras se usa IE.

Cuando se activa para la descarga, se guarda en la ubicación predeterminada o el usuario especificado. También es posible que desee examinar las llamadas API específicas del proveedor/sistema operativo que pueden hacer lo que está describiendo. Pero es posible que deba verificar los permisos antes de permitir realmente el acceso.

25

He usado la solución siguiente porque File hereda la interfaz blob.

var getFileBlob = function (url, cb) { 
     var xhr = new XMLHttpRequest(); 
     xhr.open("GET", url); 
     xhr.responseType = "blob"; 
     xhr.addEventListener('load', function() { 
      cb(xhr.response); 
     }); 
     xhr.send(); 
}; 

var blobToFile = function (blob, name) { 
     blob.lastModifiedDate = new Date(); 
     blob.name = name; 
     return blob; 
}; 

var getFileObject = function(filePathOrUrl, cb) { 
     getFileBlob(filePathOrUrl, function (blob) { 
      cb(blobToFile(blob, 'test.jpg')); 
     }); 
}; 

getFileObject('img/test.jpg', function (fileObject) { 
    console.log(fileObject); 
}); 
+1

Tengo que usar XMLHttpRequest incluso para una ruta de archivo local? –

+1

¿Funciona en todos los navegadores? – MichelH

+0

¿Funciona esto también en Android, funciona bien en iOS pero a Android parece no gustarle ...? – Stradosphere

Cuestiones relacionadas