es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El método fileWriter.write() de Cordova no funciona con blobs.

En la documentación oficial y muchas otras soluciones publicadas en línea, se supone que el siguiente código es la forma de escribir datos en un archivo en Cordova:

function writeFile(fileEntry, dataObj) {
    fileEntry.createWriter(function (fileWriter) {
        fileWriter.write(dataObj);
    });
}

writeFile(someFileEntry, blob);

En la documentación, explícitamente se muestra que se puede pasar un “blob” como “dataObj”, pero cuando pasé un “blob” como “dataObj”, el archivo resultante solo tenía 2 bytes de datos. Después de inspeccionar el archivo, descubrí que el contenido del archivo solo contenía una cadena:

{}

Por lo tanto, los 2 bytes.

He intentado pasar una cadena como “dataObj”, y los contenidos del archivo resultante fueron exactamente la misma cadena, así que supongo que las cadenas funcionan. Pero los datos que deseo escribir en un archivo son un “blob” que contiene datos de video grabados desde un “canvas”. Entonces, deberé:

  1. De alguna manera convertir el “blob” de vídeo en una cadena y escribir la cadena en el archivo
  2. Arreglar la función “fileWriter.write”

Pero no he llegado a ninguna parte con estas soluciones. He intentado “blob.text()” o usar un “fileReader” para obtener el contenido del “blob” como una cadena, pero el archivo resultante siempre está roto. Y solucionar la función “fileWriter.write” está fuera de mi alcance. ¿Alguien puede ayudarme con esto?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje de IA, puedo sugerir lo siguiente:

    Parece que el problema radica en la forma en que se maneja los datos blob en la función fileWriter.write(). Una posible solución podría ser utilizar el método createObjectURL() para convertir el objeto blob en una URL, y luego utilizar el objeto XMLHttpRequest para leer los datos de la URL y escribirlos en el archivo. Aquí hay un ejemplo de código:

    function writeFile(fileEntry, blob) {
        fileEntry.createWriter(function(fileWriter) {
            var xhr = new XMLHttpRequest();
            xhr.open('GET', URL.createObjectURL(blob), true);
            xhr.responseType = 'blob';
            xhr.onload = function() {
                if (this.status == 200) {
                    fileWriter.write(this.response);
                }
            };
            xhr.send();
        });
    }
    

    Este código utiliza un XMLHttpRequest para recuperar los datos blob como una respuesta de la URL creada por createObjectURL(), y luego escribe la respuesta en el archivo utilizando la función fileWriter.write().

    Espero que esta solución ayude, y avísame si tienes alguna pregunta adicional!

Comments are closed.