无需上传即可检索文件数据(Express、Multer)
Retrieve File data without uploading (Express, Multer)
我想通过拖放将文件从浏览器上传到 Express 服务器,该服务器将点击实际 API 进行文件上传。因此,文件不需要上传保存在Express服务器的任何地方,只需要将数据临时传递给API调用即可。
所以我从浏览器上传到 Express:
onDrop = async newFiles => {
let formData = new FormData()
for (let i = 0; i < newFiles.length; i++) {
let file = newFiles[i]
formData.append('files', file)
}
try {
const response = await axios.post('/upload', formData)
} catch (error) {
console.log(error)
}
我使用 Multer 从 Express 中检索 formData。
const router = require('express').Router()
const multer = require('multer')
const path = require('path')
const upload = multer({
dest: 'path/to/uploads',
}).array('files')
router.post('/upload', preAuth, upload, async (request, response) => {
const { files } = request
// API call
})
但我只是想暂时检索实际文件而不将其上传到任何地方,然后将其发送到端点。我想不出任何方法来做到这一点,或者它是否可能。
基本上文件是按要求提供的,即在 req.file 中,使用它通过 next("file") 将其传递给下一个中间件。也许你不需要 Multer,使用 Cloudinary 服务器和他的 API
我最终使用 express-fileupload
和 form-data
来完成将 multipart/formdata 从浏览器上传到 Express 到另一个端点的任务。
React Dropzone 前端
onDrop = async newFiles => {
let formData = new FormData()
for (let i = 0; i < newFiles.length; i++) {
let file = newFiles[i]
formData.append('files', file)
}
try {
const response = await axios.post('/upload', formData)
} catch (error) {
console.log(error)
}
}
快递后端
const fileUpload = require('express-fileupload')
app.use(fileUpload())
const router = require('express').Router()
const FormData = require('form-data')
const axios = require('axios')
router.post('/upload', preAuth, async (request, response) => {
const { files } = request
const formData = new FormData()
for (let i = 0; i < files.length; i++) {
let file = files[i]
formData.append('files', file)
}
const formHeaders = formData.getHeaders()
try {
const { data } = await axios.post(
`path/to/endpoint',
formData,
{
headers: {
'Content-Type': formHeaders['content-type'],
...formHeaders,
},
}
)
response.status(200).send(data)
} catch (error) {
response.status(400).send({ message: 'Error'})
}
})
我想通过拖放将文件从浏览器上传到 Express 服务器,该服务器将点击实际 API 进行文件上传。因此,文件不需要上传保存在Express服务器的任何地方,只需要将数据临时传递给API调用即可。
所以我从浏览器上传到 Express:
onDrop = async newFiles => {
let formData = new FormData()
for (let i = 0; i < newFiles.length; i++) {
let file = newFiles[i]
formData.append('files', file)
}
try {
const response = await axios.post('/upload', formData)
} catch (error) {
console.log(error)
}
我使用 Multer 从 Express 中检索 formData。
const router = require('express').Router()
const multer = require('multer')
const path = require('path')
const upload = multer({
dest: 'path/to/uploads',
}).array('files')
router.post('/upload', preAuth, upload, async (request, response) => {
const { files } = request
// API call
})
但我只是想暂时检索实际文件而不将其上传到任何地方,然后将其发送到端点。我想不出任何方法来做到这一点,或者它是否可能。
基本上文件是按要求提供的,即在 req.file 中,使用它通过 next("file") 将其传递给下一个中间件。也许你不需要 Multer,使用 Cloudinary 服务器和他的 API
我最终使用 express-fileupload
和 form-data
来完成将 multipart/formdata 从浏览器上传到 Express 到另一个端点的任务。
React Dropzone 前端
onDrop = async newFiles => {
let formData = new FormData()
for (let i = 0; i < newFiles.length; i++) {
let file = newFiles[i]
formData.append('files', file)
}
try {
const response = await axios.post('/upload', formData)
} catch (error) {
console.log(error)
}
}
快递后端
const fileUpload = require('express-fileupload')
app.use(fileUpload())
const router = require('express').Router()
const FormData = require('form-data')
const axios = require('axios')
router.post('/upload', preAuth, async (request, response) => {
const { files } = request
const formData = new FormData()
for (let i = 0; i < files.length; i++) {
let file = files[i]
formData.append('files', file)
}
const formHeaders = formData.getHeaders()
try {
const { data } = await axios.post(
`path/to/endpoint',
formData,
{
headers: {
'Content-Type': formHeaders['content-type'],
...formHeaders,
},
}
)
response.status(200).send(data)
} catch (error) {
response.status(400).send({ message: 'Error'})
}
})