Я пытаюсь использовать ту же функцию для загрузки изображений на мой сервер и сохраняю URL изображения в зависимости от переменной req.body.location ... Я использую busboy для обработки файла ... Однако мне не удается чтобы отправить правильный запрос на сервер с топором ios Как вы можете видеть в коде, я отправляю почтовый запрос с formData и местоположением (formdata is formData obj). Я не понимаю, где именно busboy получает formdata и если я отправлю действительный запрос? какие-либо предложения?
try {
await axios({
method: 'POST',
URL: '.../api/uploadImage'
data: {
form: formData,
location: 'profile'
}
})
} catch (err) {
console.log(err.response.data)
}
exports.uploadImage = (req, res) => {
**// What should I do here?**
const busboy = new BusBoy({ headers: req.headers })
const imageLocation = req.body.location
let imageFileName
let imageToUpload
busboy.on('file', (fieldname, file, filename, encoding, mimetype) => {
if (
mimetype !== 'image/jpeg' &&
mimetype !== 'image/jpg' &&
mimetype !== 'image/png' &&
mimetype !== 'image/svg'
) {
return res.status(400).json({
status: 'error',
message: 'Wrong file submitted',
})
}
const imageExtension = filename.split('.')[filename.split('.').length - 1]
imageFileName = `${Math.round(
Math.random() * 1000000000000
).toString()}.${imageExtension}`
const filePath = path.join(os.tmpdir(), imageFileName)
imageToUpload = {
filePath,
mimetype,
}
file.pipe(fs.createWriteStream(filePath))
})
busboy.on('finish', () => {
admin
.storage()
.bucket()
.upload(imageToUpload.filePath, {
resumable: false,
metadata: {
metadata: {
contentType: imageToUpload.mimetype,
},
},
})
.then(() => {
const imageUrl = `https://firebasestorage.googleapis.com/v0/b/${config.storageBucket}/o/${imageFileName}?alt=media`
**// I know its updating the same location... doesn't matter right now =)**
if (imageLocation === 'profile') db.doc(`/users/${req.user.usernameId}`).update({ imageUrl })
if (imageLocation === 'hero') db.doc(`/users/${req.user.usernameId}`).update({ imageUrl })
})
.then(() => {
return res.status(201).json({
status: 'success',
data: 'Image uploaded successfully',
})
})
.catch((err) => {
res.status(500).json({
status: 'error',
error: err.code,
})
})
})
busboy.end(req.rawBody)
}