我有一个带有lambda和S3存储桶的API网关.我所要做的就是通过API POST请求表单数据上传一个PDF文件.
当我上传一个超级简单的PDF时,例如:https://www.africau.edu/images/default/sample.pdf,它工作得很好.所有内容都正确反映. 然而,如果PDF文件更复杂,我得到的是一个具有相同页数的空PDF文件.没有内容.我不确定是什么导致了这一点..
这就是我接收API请求的方式.我通过文本比较比较了原始内容,原始内容是相同的:
import { parse } from "parse-multipart-data"
const contentType = event.headers["Content-Type"] || event.headers["content-type"]
const boundary = contentType?.split("boundary=")[1]
const parts = parse(Buffer.from(eventBody), boundary)
let result = {
file: {},
} as FileRequestDecoded
for (let i = 0; i < parts.length; i++) {
const part = parts[i]
if (part.type === "application/pdf") {
// Get only one file to upload
console.log("pdf found ", part.filename)
result.file = {
id: `${fileId}-${part.filename!}`.toLowerCase(),
name: part.filename!,
data: part.data, // This is the file data
}
}
}
这就是我上传到S3的方式(可能是我搞砸的部分)
await this.s3.putBufferData(
this.bucketName,
`pdfs/${fileData.file.id}`,
fileData.file.data
)
async putBufferData(bucketName: string, key: string, data: Buffer) {
const command = new PutObjectCommand({
Bucket: bucketName,
Key: key,
Body: data,
ContentType: 'application/pdf',
})
await this.s3Client.send(command)
}