Javascript 将PDF作为Blob从Azure传递到节点以进行响应
我试图通过节点后端获取存储在Azure Blob存储中的PDF,然后将该PDF文件提供给React前端。我将MicrosoftsJavascript 将PDF作为Blob从Azure传递到节点以进行响应,javascript,node.js,azure,pdf,Javascript,Node.js,Azure,Pdf,我试图通过节点后端获取存储在Azure Blob存储中的PDF,然后将该PDF文件提供给React前端。我将Microsofts@azure/storage blob与BlockBlobClient一起使用,但我在网上找到的每个示例都将readableStreamBody转换为字符串。blob的内容类型为application/pdf。我试着将readableStreamBody和纯输出传递到前端,但这些都会导致pdf的损坏。我还在线跟踪了文档,将其设置为字符串并将其传递给前端。这就产生了一个P
@azure/storage blob
与BlockBlobClient一起使用,但我在网上找到的每个示例都将readableStreamBody
转换为字符串。blob的内容类型为application/pdf
。我试着将readableStreamBody
和纯输出传递到前端,但这些都会导致pdf的损坏。我还在线跟踪了文档,将其设置为字符串并将其传递给前端。这就产生了一个PDF,可以打开,有适当数量的页面,但完全是空白的
后端的Node.js代码
app.get('/api/file/:company/:file', (req, res) => {
const containerClient = blobServiceClient.getContainerClient(req.params.company);
const blockBlobClient = containerClient.getBlockBlobClient(req.params.file);
blockBlobClient.download(0)
.then(blob => streamToString(blob.readableStreamBody))
.then(response => res.send(response))
});
前端代码
getFileBlob = (company,file) => {
axios(`/api/file/${company}/${file}`, { method: 'GET', responseType: 'blob'})
.then(response => {
const file = new Blob(
[response.data],
{type: 'application/pdf'});
const fileURL = URL.createObjectURL(file);
window.open(fileURL);
})
.catch(error => {
console.log(error);
});
}
您的方法似乎有点过度设计,为什么不从后端返回SAS签名,让前端获取附加SAS的blob URL?@evilSnobu,我不知道这是一个选项,但我一定会尝试,谢谢您是否尝试使用方法下载pdf作为缓冲区
downloadToBuffer
?