На веб-сайте 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
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение