从url上传一个pdf到Firestore存储桶(NodeJS)



我正在(使用axios(向托管在url端点的pdf发出get请求,该请求返回一个编码流,如下所示:

'%PDF-1.4n%����n1 0 objn<</Creator (Chromium)n/Producer (Skia/PDF m78)n/CreationDate (D:20211115122641+00'00')n/ModDate (D:20211115122641+00'00')>>nendobjn3 0 objn<</ca 1n/BM /Normal>>nendobjn4 0 objn<</Type /XObjectn/Subtype /Imagen/Width 1245n/Height 249n/ColorSpace /DeviceRGBn/BitsPerComponent 8n/Filter /DCTDecoden/ColorTransform 0n/Length 35434>> streamn����u0000u0010JFIFu0000u0001u0001u0000u0000u0001u0000u0001u0000u0000��u0002(ICC_PROFILEu0000u0001u0001u0000u0000u0002u0018u0000u0000u0000u0000u0002u0010u0000u0000mntrRGB XYZ 

然后我使用以下内容将其上传到我们的存储桶:

const file = bucket.file(path);
const fileOptions = {contentType: 'application/pdf'};
return file.save(data, fileOptions)
.then(() => {
return {
url: file.getSignedUrl({action: 'read', expires: expiryDate}),
path
}
});

然而,返回的URL在打开时只显示一个空白的PDF(包含正确的页数(,但没有任何内容。

从url下载PDF并将其上传到存储中的最佳方式是什么?会是这种方法吗(尽管我不确定我缺少了什么(,或者有没有一种方法可以直接上传我必须存储的URL?

您使用的代码将内容类型设置为"application/pdf'"。然而,目前尚不清楚您是如何从存储中下载可能导致这种行为的对象的。

const file = bucket.file(path);
const fileOptions = {contentType: 'application/pdf'};
return file.save(data, fileOptions)

通常,File.createWriteStream((方法用于将任意数据上传到文件。有关详细信息,请参阅文档。

此外,您还可以使用Multer从函数上传文件。Multer是一个node.js中间件,用于处理多部分/表单数据,主要用于上传文件。Multer向请求对象添加一个body对象和一个或多个文件对象。body对象包含表单文本字段的值,file或files对象包含通过表单上传的文件。有关Multer的更多信息,您也可以参阅文档。

最新更新