На веб-сайте React я призываю следующую функцию открыть файл Blob (PDF или несколько типов изображений), который я получил на сервере после того, как пользователь нажимает кнопку.function viewDocument(userId, documentId, accessToken) {
const url = new URL("https://my-api/my-controller/Document");
url.searchParams.set("UserId", userId);
url.searchParams.set("DocumentId", documentId);
fetch(url.toString(), {
method: 'get',
mode: 'cors',
credentials: 'include',
headers: {
authorization: "Bearer " + accessToken
},
body: null
})
.then((response) => {
if (!response.ok) { throw response }
response.blob().then((blob) => {
const objUrl = window.URL.createObjectURL(new Blob([blob], {type: blob.type}));
window.open(objUrl);
});
})
.catch( error => {
// handle error
});
};
< /code>
Политика безопасности моего контента включает в себя следующее: < /p>
default-src 'self';
frame-src 'self' blob:;
img-src 'self' blob:;
object-src 'self' blob:;
< /code>
Код API .net Core для извлечения документа с сервера выглядит следующим образом: < /p>
[HttpGet("api/[controller]/Document")]
[Authorize]
public async Task GetDocument(string userId, long documentId)
{
var fileExtensions = new Dictionary()
{
{".gif", "image/gif"},
{".jpg", "image/jpg"},
{".jpeg", "image/jpeg"},
{".pdf", "application/pdf"},
{".png", "image/png"},
{".tif", "image/tif"},
{".tiff", "image/tiff"}
};
var filePath = "some-file-path";
var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
var contentType = fileExtensions[Path.GetExtension(filePath).ToLower()];
return File(fileStream, contentType);
}
< /code>
С помощью этого кода и конфигурации мой веб -сайт работает так, как предназначен для последних версий Chrome (Android & ios), Safari (iOS), Edge (Android & IOS) и Firefox (Android), открыв новую вкладку с содержанием Blob. В некоторых случаях мне приходилось давать разрешения или разблокировать всплывающие окна в настройках, и это следует ожидать. Я подключил телефон к Mac и отладил страницу ... капля извлекается без ошибок, но следующая команда, чтобы открыть URL -адрес blob, просто проигнорируется по какой -то причине. Я протестировал другие веб -сайты в этом браузере, и он, кажется, открывает для них новые вкладки. Для моего веб -сайта он просто ничего не делает, когда я нажимаю на кнопку. Такое поведение похоже на то, что я видел в Safari (iOS), прежде чем я разблокировал всплывающие окна в настройках Safar, но разблокировать всплывающие окна в настройках Firefox (iOS) вообще не помогла ... новая вкладка не открывается, когда я нажимаю на кнопку. Я надеюсь, что кто -то видел это поведение и знает, что происходит.
Подробнее здесь: https://stackoverflow.com/questions/796 ... blob-files
Firefox на iOS не будет открывать полученные файлы Blob ⇐ Javascript
Форум по Javascript
-
Anonymous
1752163211
Anonymous
На веб-сайте React я призываю следующую функцию открыть файл Blob (PDF или несколько типов изображений), который я получил на сервере после того, как пользователь нажимает кнопку.function viewDocument(userId, documentId, accessToken) {
const url = new URL("https://my-api/my-controller/Document");
url.searchParams.set("UserId", userId);
url.searchParams.set("DocumentId", documentId);
fetch(url.toString(), {
method: 'get',
mode: 'cors',
credentials: 'include',
headers: {
authorization: "Bearer " + accessToken
},
body: null
})
.then((response) => {
if (!response.ok) { throw response }
response.blob().then((blob) => {
const objUrl = window.URL.createObjectURL(new Blob([blob], {type: blob.type}));
window.open(objUrl);
});
})
.catch( error => {
// handle error
});
};
< /code>
Политика безопасности моего контента включает в себя следующее: < /p>
default-src 'self';
frame-src 'self' blob:;
img-src 'self' blob:;
object-src 'self' blob:;
< /code>
Код API .net Core для извлечения документа с сервера выглядит следующим образом: < /p>
[HttpGet("api/[controller]/Document")]
[Authorize]
public async Task GetDocument(string userId, long documentId)
{
var fileExtensions = new Dictionary()
{
{".gif", "image/gif"},
{".jpg", "image/jpg"},
{".jpeg", "image/jpeg"},
{".pdf", "application/pdf"},
{".png", "image/png"},
{".tif", "image/tif"},
{".tiff", "image/tiff"}
};
var filePath = "some-file-path";
var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
var contentType = fileExtensions[Path.GetExtension(filePath).ToLower()];
return File(fileStream, contentType);
}
< /code>
С помощью этого кода и конфигурации мой веб -сайт работает так, как предназначен для последних версий Chrome (Android & ios), Safari (iOS), Edge (Android & IOS) и Firefox (Android), открыв новую вкладку с содержанием Blob. В некоторых случаях мне приходилось давать разрешения или разблокировать всплывающие окна в настройках, и это следует ожидать. Я подключил телефон к Mac и отладил страницу ... капля извлекается без ошибок, но следующая команда, чтобы открыть URL -адрес blob, просто проигнорируется по какой -то причине. Я протестировал другие веб -сайты в этом браузере, и он, кажется, открывает для них новые вкладки. Для моего веб -сайта он просто ничего не делает, когда я нажимаю на кнопку. Такое поведение похоже на то, что я видел в Safari (iOS), прежде чем я разблокировал всплывающие окна в настройках Safar, но разблокировать всплывающие окна в настройках Firefox (iOS) вообще не помогла ... новая вкладка не открывается, когда я нажимаю на кнопку. Я надеюсь, что кто -то видел это поведение и знает, что происходит.
Подробнее здесь: [url]https://stackoverflow.com/questions/79697317/firefox-on-ios-wont-open-fetched-blob-files[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия