Estou permitindo que o usuário carregue imagens em uma página via arrastar e soltar e outros métodos. Quando uma imagem é descartada, estou usando URL.createObjectURL
para converter em um URL de objeto para exibir a imagem. Não estou revogando o URL, pois o reutilizo.
Portanto, quando chega a hora de criar um FormData
objeto para permitir que eles carreguem um formulário com uma dessas imagens, existe alguma maneira de reverter esse URL de objeto novamente para um Blob
ou mais File
e depois anexá-lo a um FormData
objeto?
javascript
html
fileapi
blobs
BrianFreud
fonte
fonte
XMLHttpRequest
para o URL do blob.Respostas:
Solução moderna:
O URL pode ser um objeto ou um URL normal.
fonte
let file = await fetch(url).then(r => r.blob()).then(blobFile => new File([blobFile], "fileNameGoesHere", { type: "image/png" })
Como menciona gengkev em seu comentário acima, parece que a melhor / única maneira de fazer isso é com uma chamada assíncrona xhr2:
Atualização (2018): Para situações em que o ES5 pode ser usado com segurança, Joe tem uma resposta mais simples baseada em ES5 abaixo.
fonte
Talvez alguém ache isso útil ao trabalhar com React / Node / Axios. Usei isso para meu recurso de upload de imagem do Cloudinary
react-dropzone
na interface do usuário.fonte
Refused to connect to 'blob:https://twitter.com/9e00aec3-6729-42fb-b5a7-01f50be302fa' because it violates the following Content Security Policy directive: "connect-src
. Você poderia ter uma dica do que eu poderia estar fazendo de errado / não entendendo?Consulte Obtendo dados BLOB da solicitação XHR, que indica que o BlobBuilder não funciona no Chrome, então você precisa usar:
fonte
Usando busca, por exemplo, como abaixo:
Você pode colar no console do Chrome para testar. o arquivo com download com 'sample.xlsx' Espero que ajude!
fonte
Infelizmente, a resposta do @ BrianFreud não se encaixa nas minhas necessidades, eu tinha uma necessidade um pouco diferente e sei que essa não é a resposta para a pergunta do @ BrianFreud, mas estou deixando aqui porque muitas pessoas chegaram aqui com a minha mesma necessidade. Eu precisava de algo como 'Como obter um arquivo ou blob de um URL?', E a resposta correta atual não se encaixa nas minhas necessidades porque não é um domínio cruzado.
Eu tenho um site que consome imagens de um Amazon S3 / Azure Storage e lá guardo objetos nomeados com identificadores exclusivos:
exemplo: http: //****.blob.core.windows.net/systemimages/bf142dc9-0185-4aee-a3f4-1e5e95a09bcf
Algumas dessas imagens devem ser baixadas da nossa interface do sistema. Para evitar a transmissão desse tráfego pelo meu servidor HTTP, já que esses objetos não exigem acesso a nenhuma segurança (exceto pela filtragem de domínio), decidi fazer uma solicitação direta no navegador do usuário e usar o processamento local para dar ao arquivo um nome real e extensão.
Para conseguir isso, usei este excelente artigo de Henry Algus: http://www.henryalgus.com/reading-binary-files-using-jquery-ajax/
1. Primeiro passo: adicione suporte binário ao jquery
2. Segunda etapa: faça uma solicitação usando este tipo de transporte.
Agora você pode usar o Blob criado como quiser, no meu caso, quero salvá-lo em disco.
3. Opcional: salve o arquivo no computador do usuário usando o FileSaver
Eu usei o FileSaver.js para salvar em disco o arquivo baixado. Se você precisar fazer isso, use esta biblioteca javascript:
https://github.com/eligrey/FileSaver.js/
Espero que isso ajude outras pessoas com necessidades mais específicas.
fonte
Se você mostrar o arquivo em uma tela de qualquer maneira, também poderá converter o conteúdo da tela em um objeto de blob.
fonte