Estoy permitiendo que el usuario cargue imágenes en una página mediante arrastrar y soltar y otros métodos. Cuando se cae una imagen, estoy usandoURL.createObjectURL
para convertir a una URL de objeto para mostrar la imagen. No estoy revocando la URL, ya que la reutilizo.
Entonces, cuando llega el momento de crear un FormData
objeto para que pueda permitir que carguen un formulario con una de esas imágenes, ¿hay alguna forma de que luego pueda revertir esa URL de objeto en Blob
o File
así puedo agregarlo a un FormData
¿objeto?
javascript
html
fileapi
blobs
BrianFreud
fuente
fuente
XMLHttpRequest
correo electrónico a la URL del blob.Respuestas:
Solución moderna:
La url puede ser una url de objeto o una url normal.
fuente
let file = await fetch(url).then(r => r.blob()).then(blobFile => new File([blobFile], "fileNameGoesHere", { type: "image/png" })
Como gengkev alude en su comentario anterior, parece que la mejor / única forma de hacerlo es con una llamada asíncrona xhr2:
Actualización (2018): para situaciones en las que ES5 se puede usar de forma segura, Joe tiene una respuesta más simple basada en ES5 a continuación.
fuente
Tal vez alguien encuentre esto útil cuando trabaje con React / Node / Axios. Utilicé esto para mi función de carga de imágenes
react-dropzone
en la nube en la interfaz de usuario.fuente
Refused to connect to 'blob:https://twitter.com/9e00aec3-6729-42fb-b5a7-01f50be302fa' because it violates the following Content Security Policy directive: "connect-src
. ¿Podría darme una pista de lo que podría estar haciendo mal / no obteniendo?Consulte Obtención de datos BLOB de la solicitud XHR que indica que BlobBuilder no funciona en Chrome, por lo que debe usar:
fuente
Usando fetch por ejemplo como a continuación:
Puede pegar en la consola de Chrome para probar. el archivo con descarga con 'sample.xlsx' ¡Espero que pueda ayudar!
fuente
Desafortunadamente, la respuesta de @ BrianFreud no se ajusta a mis necesidades, tenía una necesidad un poco diferente, y sé que esa no es la respuesta a la pregunta de @ BrianFreud, pero la dejo aquí porque muchas personas llegaron aquí con mi misma necesidad. Necesitaba algo como '¿Cómo obtener un archivo o blob de una URL?', Y la respuesta correcta actual no se ajusta a mis necesidades porque no es de dominio cruzado.
Tengo un sitio web que consume imágenes de Amazon S3 / Azure Storage, y allí almaceno objetos con identificadores únicos:
muestra: http: //****.blob.core.windows.net/systemimages/bf142dc9-0185-4aee-a3f4-1e5e95a09bcf
Algunas de estas imágenes deben descargarse desde la interfaz de nuestro sistema. Para evitar pasar este tráfico a través de mi servidor HTTP, ya que estos objetos no requieren seguridad para acceder (excepto mediante el filtrado de dominios), decidí hacer una solicitud directa en el navegador del usuario y utilizar el procesamiento local para dar al archivo un nombre real y extensión.
Para lograrlo, he usado este gran artículo de Henry Algus: http://www.henryalgus.com/reading-binary-files-using-jquery-ajax/
1. Primer paso: agregar soporte binario a jquery
2. Segundo paso: realice una solicitud con este tipo de transporte.
Ahora puedes usar el Blob creado como quieras, en mi caso quiero guardarlo en el disco.
3. Opcional: guarde el archivo en la computadora del usuario con FileSaver
He usado FileSaver.js para guardar en el disco el archivo descargado, si necesita hacerlo, use esta biblioteca de JavaScript:
https://github.com/eligrey/FileSaver.js/
Espero que esto ayude a otros con necesidades más específicas.
fuente
Si muestra el archivo en un lienzo de todos modos, también puede convertir el contenido del lienzo en un objeto blob.
fuente