我有一个作为 Google Cloud Function 托管的 Express 应用程序,但它在云上的工作方式与在本地工作的方式不同。
在我的 NextJS 应用程序中,我通过将 FileList 添加到 FormData 的新实例来将其发送到端点。我添加它的方式是遍历存储 FileList 的状态并将每个文件附加到 formData。
const [files, setFiles] = useState<FileList | undefined>();
const formData = new FormData();
for(let i = 0; i < files.length; i++){
formData.append('pdfFile', files[i]);
}
然后我使用这个 formData 并将其作为获取请求的主体发送到 Cloud Function 端点
fetch('https://[function_uri]/extract', {method: 'POST', body: formData})
.then((res) => res.json())
.then((res) => console.log('Response: ', res))
.catch((error) => console.error(error))
这是我如何设置 Express 应用程序
const express = require('express');
const pdfParse = require('pdf-parse');
const cors = require('cors');
const multer = require('multer');
const upload = multer();
const app = express();
app.use(cors());
app.post('/extract', upload.array('pdfFile'), async (req, res) => {
res.set('Access-Control-Allow-Origin', '*');
if (!req.files) {
res.status(400);
res.end();
}
const files = req.files;
const response = [];
if (files.length) {
for (let i = 0; i < files.length; i++) {
const buffer = Buffer.from(files[i].buffer);
await pdfParse(buffer).then((result) => {
response.push({
name: files[i].originalname,
text: result.text,
});
});
}
} else {
const buffer = Buffer.from(files.buffer);
await pdfParse(buffer).then((result) => {
response.push({
name: files.originalname,
text: result.text,
});
});
}
res.json({ response });
});
app.listen(9090, () => console.log('Server running on port 9090.'));
module.exports = {
app,
};
我正在使用 multer 获取文件,当在本地运行 express 应用程序时,一切正常,但是,一旦我将代码部署到 Google Cloud 平台,req.files 现在是一个空数组,而不是填充数据我预计在本地运行后会抛出错误,因为数据现在未定义。老实说,我不确定我是否发送了错误的数据,或者我是否在服务器上处理错误。这是我第一次使用 Google Cloud Functions,所以我一直在盲目地研究这一点。
下面是我期望从req.files得到的例子
[
{
fieldname: 'pdfFile',
originalname: 'FileName.pdf',
encoding: '7bit',
mimetype: 'application/pdf',
buffer: <Buffer 27 50 44 46 2d 31 2e 35 0d 0a 25 c5 b5 b5 b5 0d 0a 31 20 30 20 6a 62 6a 0d 0a 3c 3c 2f 54 79 70 65 2f 43 21 74 61 7c 6f 67 2f 50 61 67 65 73 20 32 20 ... 41169 more bytes>,
size: 50283
}
]