Я разрешаю пользователю загружать изображения на страницу с помощью перетаскивания и других методов. Когда изображение отбрасывается, я использую его URL.createObjectURL
для преобразования в URL-адрес объекта для отображения изображения. Я не аннулирую URL-адрес, так как я его повторно использую.
Итак, когда придет время создать FormData
объект, чтобы я мог разрешить им загрузить форму с одним из этих изображений в нем, есть ли какой-нибудь способ вернуть этот URL-адрес объекта обратно в Blob
или File
около того, я могу затем добавить его в FormData
объект?
javascript
html
fileapi
blobs
BrianFreud
источник
источник
XMLHttpRequest
на URL-адрес большого двоичного объекта.Ответы:
Современное решение:
URL-адрес может быть URL-адресом объекта или обычным URL-адресом.
источник
let file = await fetch(url).then(r => r.blob()).then(blobFile => new File([blobFile], "fileNameGoesHere", { type: "image/png" })
Как упоминает генгкев в своем комментарии выше, похоже, что лучший / единственный способ сделать это - использовать вызов async xhr2:
Обновление (2018): для ситуаций, когда можно безопасно использовать ES5, у Джо есть более простой ответ на основе ES5 ниже.
источник
Может быть, кому-то это пригодится при работе с React / Node / Axios. Я использовал это для моей функции загрузки изображений Cloudinary
react-dropzone
в пользовательском интерфейсе.источник
Refused to connect to 'blob:https://twitter.com/9e00aec3-6729-42fb-b5a7-01f50be302fa' because it violates the following Content Security Policy directive: "connect-src
. Не могли бы вы подсказать, что я делаю неправильно / не понимаю?См. Раздел Получение данных BLOB из запроса XHR, в котором указано, что BlobBuilder не работает в Chrome, поэтому вам необходимо использовать:
источник
Используя выборку, например, как показано ниже:
Вы можете вставить в консоль Chrome для тестирования. файл с загрузкой с 'sample.xlsx' Надеюсь, это поможет!
источник
К сожалению, ответ @BrianFreud не соответствует моим потребностям, у меня была немного другая потребность, и я знаю, что это не ответ на вопрос @BrianFreud, но я оставляю его здесь, потому что многие люди пришли сюда с той же потребностью. Мне нужно было что-то вроде «Как получить файл или большой двоичный объект из URL-адреса?», И текущий правильный ответ не соответствует моим потребностям, потому что он не является междоменным.
У меня есть веб-сайт, который использует изображения из хранилища Amazon S3 / Azure, и там я храню объекты с уникальными идентификаторами:
пример: http: //****.blob.core.windows.net/systemimages/bf142dc9-0185-4aee-a3f4-1e5e95a09bcf
Некоторые из этих изображений следует загрузить из интерфейса нашей системы. Чтобы избежать прохождения этого трафика через мой HTTP-сервер, поскольку для доступа к этим объектам не требуется какой-либо защиты (кроме фильтрации домена), я решил сделать прямой запрос в браузере пользователя и использовать локальную обработку, чтобы дать файлу настоящее имя и расширение.
Для этого я использовал эту замечательную статью Генри Альгуса: http://www.henryalgus.com/reading-binary-files-using-jquery-ajax/
1. Первый шаг: добавьте поддержку двоичного кода в jquery.
2. Второй шаг: сделайте запрос, используя этот тип транспорта.
Теперь вы можете использовать созданный Blob как хотите, в моем случае я хочу сохранить его на диск.
3. Необязательно: сохраните файл на компьютере пользователя с помощью FileSaver.
Я использовал FileSaver.js для сохранения на диск загруженного файла, если вам нужно это сделать, используйте эту библиотеку javascript:
https://github.com/eligrey/FileSaver.js/
Я ожидаю, что это поможет другим с более конкретными потребностями.
источник
Если вы все равно показываете файл на холсте, вы также можете преобразовать его содержимое в большой двоичный объект.
источник