Загрузка с URL-адреса объекта всегда не выполняется в первый раз в Firefox
При открытии URL-адреса объекта в Firefox содержимое файла отображается правильно (в средстве просмотра PDF-файлов), но "Сохранить страницу как..." не может загрузить большой двоичный объект. В списке загрузок Firefox этот файл указан как "сбойный". Нажатие на "повторить" прошло успешно.
Такой же подход успешно работает в Chrome.
Бэкэнд не задействован (на данный момент). Большой двоичный объект правильно извлекается во внешнем интерфейсе и отображается, но его можно загрузить только при повторной попытке.
URL-адрес объекта не был отозван (и я все еще вижу запись в хранилище сеанса для большого двоичного объекта. То, что он всегда работает во второй раз, похоже, указывает на проблему времени для меня, но я не знаю, где чтобы увидеть, что здесь не удалось.
window.open(URL.createObjectURL(blob))
где blob был создан из содержимого серверной части с помощью Angular HttpClient:
getContentFileById(id: string): Observable<Blob> {
return this.http.get(`${this.documentUrl}/${id}/content`, {
responseType: 'blob'
});
}
Это как с текущим Firefox (78.0.2), так и с Firefox Developer Edition (79.0b9) в macOS Catalina (10.15.5).
Это происходит с файлом, который имел исходное расположение содержимого attachment
или inline
хотя я подозреваю, что это все равно потеряно, когда оно преобразовано в каплю.
ОБНОВИТЬ:
Вот упрощенный минимальный пример, где я вижу то же поведение. Я не мог понять, как создатьBlob
непосредственно из двоичного представления ASCII, поэтому в примере используется строка на основе base64. Основная идея открытия URL-адреса созданного объекта остается прежней:
http://jsfiddle.net/4m8onzu6/9/
К сожалению, этот пример открывается только как PDF-файл в Firefox, в то время как мой реальный код также работает в Chrome...
Я заметил, что выбор обычной кнопки загрузки (которую, вероятно, использует большинство пользователей) работает. Только когда вы пытаетесь "Сохранить страницу как...", она сначала терпит неудачу, но вы можете загрузить файл, нажав "Повторить" в списке загрузок...