Quiero transferir un archivo desde un formulario a un webworker. En chrome me simples puede utilizar este código para la transferencia de un FileList-Objeto:

worker.postMessage(files: array_files);

Pero con Firefox me sale este error:

Transfer file to webworker: DataCloneError: The object could not be cloned.

Así que traté de usar la Sintaxis de transferibles de los objetos. Algo como esto?

var post = {files: array_files, file_ids: response.file_ids};
worker.postMessage(post, [post]);

Pero con el que tengo esta en Chrome

Uncaught DataCloneError: Failed to execute 'postMessage' on 'Worker': Value at index 0 does not have a transferable type.

Y todavía

DataCloneError: The object could not be cloned.

en Firefox.

¿Cuál es la forma correcta de pasar un Archivo a un trabajador?

  • Hay Mozilla error bugzilla.mozilla.org/show_bug.cgi?id=823484, por lo que no están de suerte, a menos que alguien va a solucionarlo. En realidad, yo estoy dispuesto a corregir, sin embargo no me siento a gusto haciendo Firefox construye, así que si alguien podía hacer fro mí, entonces yo podría cuidar de código
  • Yo tenía el mismo problema, The object could not be cloned. Que era porque yo estaba refiriendo a los param en mi mensaje. Se puede dar más de código?

1 Comentario

  1. 6

    No sé cómo pasar objetos de Archivo con postMessage, pero al menos puedo aconsejar que transferir objetos no funcionan de esta manera. El segundo parámetro opcional es una matriz de la copia de ArrayBuffer instancias de cualquier matrices desea transmitir. Así, por ejemplo, supongamos que el mensaje que le gustaría publicar es un objeto estructurado:

    var message = {foo: 'abc', bar: new Uint8Array(...)};
    
    worker.postMessage(message, [message.bar.buffer])
    

    Observe también que la aprobación de un conjunto de tipos a otro trabajador/de la ventana como una mobiliarios objeto de la transferencia de la matriz inaccesible desde el envío de trabajador/de la ventana.

Dejar respuesta

Please enter your comment!
Please enter your name here