Pozwalam użytkownikowi ładować obrazy na stronę za pomocą przeciągania i upuszczania oraz innych metod. Kiedy obraz jest upuszczany, używam go URL.createObjectURL
do konwersji na adres URL obiektu, aby wyświetlić obraz. Nie odwołuję adresu URL, ponieważ używam go ponownie.
Tak więc, kiedy przychodzi czas na utworzenie FormData
obiektu, aby umożliwić im przesłanie formularza z jednym z tych obrazów, czy jest jakiś sposób, aby następnie odwrócić ten adres URL obiektu z powrotem do Blob
lub File
tak, abym mógł następnie dołączyć go do FormData
obiekt?
javascript
html
fileapi
blobs
BrianFreud
źródło
źródło
XMLHttpRequest
adres URL obiektu blob.Odpowiedzi:
Nowoczesne rozwiązanie:
Adres URL może być adresem URL obiektu lub normalnym adresem URL.
źródło
let file = await fetch(url).then(r => r.blob()).then(blobFile => new File([blobFile], "fileNameGoesHere", { type: "image/png" })
Jak Gengkev wspomina w swoim komentarzu powyżej, wygląda na to, że najlepszym / jedynym sposobem na zrobienie tego jest wywołanie asynchroniczne xhr2:
Aktualizacja (2018): w sytuacjach, w których można bezpiecznie używać ES5, Joe ma poniżej prostszą odpowiedź opartą na ES5.
źródło
Może ktoś uzna to za przydatne podczas pracy z React / Node / Axios. Użyłem tego do mojej funkcji przesyłania obrazu Cloudinary
react-dropzone
w interfejsie użytkownika.źródło
Refused to connect to 'blob:https://twitter.com/9e00aec3-6729-42fb-b5a7-01f50be302fa' because it violates the following Content Security Policy directive: "connect-src
. Czy możesz mieć wskazówkę, co mogę robić źle, a czego nie robić?Zobacz Pobieranie danych BLOB z żądania XHR, które wskazuje, że BlobBuilder nie działa w Chrome, więc musisz użyć:
źródło
Na przykład używając fetch, jak poniżej:
Możesz wkleić na konsoli Chrome, aby przetestować. plik do pobrania z „sample.xlsx” Mam nadzieję, że może pomóc!
źródło
Niestety odpowiedź @ BrianFreud nie pasuje do moich potrzeb, miałem trochę inną potrzebę i wiem, że to nie jest odpowiedź na pytanie @ BrianFreud, ale zostawiam ją tutaj, ponieważ wiele osób przybyło tutaj z tą samą potrzebą. Potrzebowałem czegoś w stylu „Jak uzyskać plik lub obiekt blob z adresu URL?”, A aktualna poprawna odpowiedź nie odpowiada moim potrzebom, ponieważ nie jest międzydomenowa.
Mam witrynę internetową, która zużywa obrazy z magazynu Amazon S3 / Azure i tam przechowuję obiekty o nazwach z unikatowymi identyfikatorami:
przykład: http: //****.blob.core.windows.net/systemimages/bf142dc9-0185-4aee-a3f4-1e5e95a09bcf
Niektóre z tych obrazów należy pobrać z naszego interfejsu systemowego. Aby uniknąć przekazywania tego ruchu przez mój serwer HTTP, ponieważ te obiekty nie wymagają dostępu do żadnych zabezpieczeń (z wyjątkiem filtrowania domeny), postanowiłem wykonać bezpośrednie żądanie w przeglądarce użytkownika i użyć lokalnego przetwarzania, aby nadać plikowi prawdziwą nazwę i rozbudowa.
Aby to osiągnąć, wykorzystałem ten wspaniały artykuł Henry'ego Algusa: http://www.henryalgus.com/reading-binary-files-using-jquery-ajax/
1. Pierwszy krok: dodaj obsługę binarną do jquery
2. Krok drugi: Złóż wniosek przy użyciu tego typu transportu.
Teraz możesz użyć utworzonego Bloba, jak chcesz, w moim przypadku chcę go zapisać na dysku.
3. Opcjonalnie: Zapisz plik na komputerze użytkownika za pomocą programu FileSaver
Użyłem FileSaver.js do zapisania na dysku pobranego pliku, jeśli chcesz to zrobić, użyj tej biblioteki javascript:
https://github.com/eligrey/FileSaver.js/
Oczekuję, że pomoże to innym z bardziej konkretnymi potrzebami.
źródło
Jeśli mimo wszystko pokazujesz plik w kanwie, możesz również przekonwertować zawartość kanwy na obiekt blob.
źródło