相关疑难解决方法(0)

如何使用Express功能为Firebase执行HTTP文件上传(multer,busboy)

我正在尝试将文件上传到云功能,使用Express处理那里的请求,但我没有成功.我创建了一个本地工作的版本:

服务器端js

const express = require('express');
const cors = require('cors');
const fileUpload = require('express-fileupload');

const app = express();
app.use(fileUpload());
app.use(cors());

app.post('/upload', (req, res) => {
    res.send('files: ' + Object.keys(req.files).join(', '));
});
Run Code Online (Sandbox Code Playgroud)

客户端js

const formData = new FormData();
Array.from(this.$refs.fileSelect.files).forEach((file, index) => {
    formData.append('sample' + index, file, 'sample');
});

axios.post(
    url,
    formData, 
    {
        headers: { 'Content-Type': 'multipart/form-data' },
    }
);
Run Code Online (Sandbox Code Playgroud)

当部署到云函数时,这个完全相同的代码似乎会中断,其中req.files未定义.有谁知道这里发生了什么?

编辑 我也有一个使用multer,在本地工作得很好,但一旦上传到云功能,这让我得到一个空数组(相同的客户端代码):

const app = express();
const upload = multer();
app.use(cors());

app.post('/upload', upload.any(), (req, res) => {
    res.send(JSON.stringify(req.files));
});
Run Code Online (Sandbox Code Playgroud)

javascript express firebase google-cloud-functions

25
推荐指数
6
解决办法
9609
查看次数

使用Express in Cloud Functions处理multipart/form-data POST

我一直在尝试使用Firebase函数和Express来处理POST(multipart/form-data),但它只是不起作用.在本地服务器上试过这个,它运行得很好.一切都是相同的,除了它没有包含在Firebase功能中.

除了搞砸了请求对象之外,它似乎也搞砸了busboy的工作方式.

我尝试过这里介绍的不同解决方案,但它们只是不起作用.正如一位用户所提到的那样,传递给busboy的回调(在找到'field'时或在完成数据传递时调用)从不被调用,函数只是挂起.

有任何想法吗?

这是我的函数的代码供参考:

const functions = require('firebase-functions');
const express = require('express');
const getRawBody = require('raw-body');
const contentType = require('content-type')
const Busboy = require('busboy');

const app = express();

const logging = (req, res, next) => {
  console.log(`> request body: ${req.body}`);
  next();
}

const toRawBody = (req, res, next) => {
  const options = {
      length: req.headers['content-length'],
      limit: '1mb',
      encoding: contentType.parse(req).parameters.charset
  };
  getRawBody(req, options)
      .then(rawBody => {
          req.rawBody = rawBody
          next();
      })
      .catch(error => {
          return …
Run Code Online (Sandbox Code Playgroud)

express firebase busboy google-cloud-functions

6
推荐指数
2
解决办法
3258
查看次数