Я считаю, что этот код может быть способом открыть PDF-файл в кодировке Base64 в другой вкладке или окне браузера. Однако, когда я пытаюсь на своем ПК с Windows использовать браузер Edge, появляется новая пустая вкладка, и процессор ПК начинает работать дальше, пока я не закрою браузер. PDF-документ не отображается.
using (var memoryStream = new MemoryStream())
{
pdf.Save(memoryStream);
string base64 = Convert.ToBase64String(memoryStream.ToArray());
string url = $"data:application/pdf;base64,{base64}";
JS.InvokeVoidAsync("open", url, "_blank");
}
Я также попробовал аналогичный метод для загрузки файла вместо открытия. Опять же, браузер не указывал на то, что происходит загрузка файла, и процессор ПК продолжал работать, пока я не закрыл браузер.
using (var memoryStream = new MemoryStream())
{
pdf.Save(memoryStream);
JS.InvokeAsync(
"downloadFile",
uid + ".pdf",
Convert.ToBase64String(memoryStream.ToArray())
);
};
Используется этот скрипт downloadFile.
function downloadFile(fileName, bytesBase64) {
if (navigator.msSaveBlob) {
var data = window.atob(bytesBase64);
var bytes = new Uint8Array(data.length);
for (var i = 0; i < data.length; i++) {
bytes = data.charCodeAt(i);
}
var blob = new Blob([bytes.buffer], { type: "application/octet-stream" });
navigator.msSaveBlob(blob, fileName);
}
else {
var link = document.createElement('a');
link.download = fileName;
link.href = "data:application/octet-stream;base64," + bytesBase64;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
}
function open(bytesBase64) {
var blob = base64ToBlob(bytesBase64, "application/octet-stream");
var url = URL.createObjectURL(blob);
window.open(url, "_blank");
}
function base64ToBlob(base64, contentType) {
var byteCharacters = atob(base64);
var byteArrays = [];
for (var offset = 0; offset < byteCharacters.length; offset += 512) {
var slice = byteCharacters.slice(offset, offset + 512);
var byteNumbers = new Array(slice.length);
for (var i = 0; i < slice.length; i++) {
byteNumbers = slice.charCodeAt(i);
}
var byteArray = new Uint8Array(byteNumbers);
byteArrays.push(byteArray);
}
var blob = new Blob(byteArrays, { type: contentType });
return blob;
}
Подробнее здесь: https://stackoverflow.com/questions/788 ... rowser-tab
Приложение Blazor WASM открывает поток памяти PDF в другой вкладке браузера ⇐ C#
Место общения программистов C#
1722484100
Anonymous
Я считаю, что этот код может быть способом открыть PDF-файл в кодировке Base64 в другой вкладке или окне браузера. Однако, когда я пытаюсь на своем ПК с Windows использовать браузер Edge, появляется новая пустая вкладка, и процессор ПК начинает работать дальше, пока я не закрою браузер. PDF-документ не отображается.
using (var memoryStream = new MemoryStream())
{
pdf.Save(memoryStream);
string base64 = Convert.ToBase64String(memoryStream.ToArray());
string url = $"data:application/pdf;base64,{base64}";
JS.InvokeVoidAsync("open", url, "_blank");
}
Я также попробовал аналогичный метод для загрузки файла вместо открытия. Опять же, браузер не указывал на то, что происходит загрузка файла, и процессор ПК продолжал работать, пока я не закрыл браузер.
using (var memoryStream = new MemoryStream())
{
pdf.Save(memoryStream);
JS.InvokeAsync(
"downloadFile",
uid + ".pdf",
Convert.ToBase64String(memoryStream.ToArray())
);
};
Используется этот скрипт downloadFile.
function downloadFile(fileName, bytesBase64) {
if (navigator.msSaveBlob) {
var data = window.atob(bytesBase64);
var bytes = new Uint8Array(data.length);
for (var i = 0; i < data.length; i++) {
bytes[i] = data.charCodeAt(i);
}
var blob = new Blob([bytes.buffer], { type: "application/octet-stream" });
navigator.msSaveBlob(blob, fileName);
}
else {
var link = document.createElement('a');
link.download = fileName;
link.href = "data:application/octet-stream;base64," + bytesBase64;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
}
function open(bytesBase64) {
var blob = base64ToBlob(bytesBase64, "application/octet-stream");
var url = URL.createObjectURL(blob);
window.open(url, "_blank");
}
function base64ToBlob(base64, contentType) {
var byteCharacters = atob(base64);
var byteArrays = [];
for (var offset = 0; offset < byteCharacters.length; offset += 512) {
var slice = byteCharacters.slice(offset, offset + 512);
var byteNumbers = new Array(slice.length);
for (var i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i);
}
var byteArray = new Uint8Array(byteNumbers);
byteArrays.push(byteArray);
}
var blob = new Blob(byteArrays, { type: contentType });
return blob;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78818961/blazor-wasm-app-open-pdf-memorystream-in-another-browser-tab[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия