我想拖放文件以将文件从浏览器上传到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)
}
从Express中,我使用Multer来检索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
})
但是我只想临时检索实际文件而不将其上传到任何地方,然后将其发送到端点。我不知道有什么办法可以做到这一点,甚至不可能。
我最终使用express-fileupload
并form-data
完成了从浏览器发送Express / Multidata / formdata上传到另一个端点的任务。
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'})
}
})
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句