gpt4 book ai didi

javascript - 使用 URL.createObjectURL 重建 PDF 后损坏

转载 作者:行者123 更新时间:2023-12-05 05:13:42 26 4
gpt4 key购买 nike

我试图从服务器传递一个 PDF 文件并在浏览器中显示它,但输出结果已损坏。

var blob = atob(data.Package);

console.log(blob);

var file = new Blob([blob], { type: "application/pdf" });

const fileURL = URL.createObjectURL(file);

window.open(fileURL);

控制台日志输出一些看似正确的 PDF(只是输出的开头):

enter image description here

我在传输之前在服务器上保存了一份 PDF 副本,以确保它没有损坏并且可以正常工作。

用 URL.createObjectURL(file) 构造的 URL 似乎很短: Blob :http://localhost:61631/ad749684-2992-4311-8b17-f382a7c687be

服务器端代码:

Object doc = Convert.ToBase64String(_Document.DocumentStream.ToArray());
JObject response = new JObject(new JProperty("Package", JObject.FromObject(doc)));
return new AspResponse<Object>(response);

最佳答案

看起来问题是因为您需要将 PDF 数据转换为实际的字节数组,然后将其传递给 Blob 构造函数。试试这个:

function convertToByteArray(input) {
var sliceSize = 512;
var bytes = [];

for (var offset = 0; offset < input.length; offset += sliceSize) {
var slice = input.slice(offset, offset + sliceSize);

var byteNumbers = new Array(slice.length);

for (var i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i);
}

const byteArray = new Uint8Array(byteNumbers);

bytes.push(byteArray);
}

return bytes;
}

var blob = atob(data.Package);

console.log(blob);

var file = new Blob(convertToByteArray(blob), { type: "application/pdf" });

const fileURL = URL.createObjectURL(file);

window.open(fileURL);

关于javascript - 使用 URL.createObjectURL 重建 PDF 后损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53232820/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com