我有一個快遞服務器。當用戶去對 profiel 發出 post 請求時。他們提交個人資料圖片。我正在嘗試使用 multer 來獲取正在發送的照片/影像并將其存盤在后端目錄的檔案夾中。
我設定了 multer,但由于某種原因,它沒有保存任何我希望它保存在本地以便我可以檢索它的照片。我該如何解決這個問題。有沒有人知道如何解決這個問題。
控制器:
const Profile = require("../../models/UserModels/Profiles.js")
const User = require('../../models/UserModels/Users.js')
const multer = require('multer')
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, '../../client/images/profile/')
},
filename: function (req, file, cb) {
const uniqueSuffix = Date.now() '-' Math.round(Math.random() * 1E9)
cb(null, file.fieldname '-' uniqueSuffix)
}
})
const upload = multer({ storage: storage })
...
post:(req, res) => {
console.log(req.body)
console.log(req.files)
upload.single(req.files.profile_pic.name) <----------------
let body = req.body
Profile.create({
profile_pic: req.files.profile_pic.name,
f_name: body.f_name,
l_name: body.l_name,
bio: body.bio,
location: body.location,
sm_facebook: body.sm_facebook,
sm_instagram: body.sm_instagram,
sm_twitter: body.sm_twitter,
sm_website: body.sm_website,
followers: body.followers,
following: body.following,
photos: body.photos,
downloads: body.downloads,
edits: body.edits,
userId: body.userId
})
.then((data) => {
res.send(data).status(200)
})
.catch((err) => {
console.error(err)
res.send(err).status(400)
})
},
這是此后端的目錄:

- - - - - -更新 - - - - - - - -
這是來自前端的反應 axios 請求:
function createProfile(userId){
let data = new FormData()
data.append('f_name', firstName)
data.append('l_name', lastName)
data.append('bio', bio)
data.append('location', location)
data.append('sm_facebook', facebook)
data.append('sm_instagram', instagram)
data.append('sm_twitter', twitter)
data.append('sm_website', website)
data.append('followers', 0)
data.append('following', 0)
data.append('photos', 0)
data.append('edits', 0)
data.append('downloads', 0)
data.append('userId', userId)
data.append('profile_pic', profilePicture)
console.log(data)
axios({
method: "post",
url: "/api/profile/",
data: data,
headers: { "Content-Type": "multipart/form-data" },
})
.then((data) => {
return(<Navigate to='/' />)
})
.catch((err) => {
console.error(err)
})
}
uj5u.com熱心網友回復:
您必須指定 multer 的存盤路徑,就好像您位于專案的根檔案夾中一樣。所以不要使用'../../client/images/profile/'作為存盤路徑,你應該使用:'./backend/client/images/profile'.
您的代碼最終應如下所示:
const multer = require('multer')
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, './backend/client/images/profile')
},
filename: function (req, file, cb) {
const uniqueSuffix = Date.now() '-' Math.round(Math.random() * 1E9)
cb(null, file.fieldname '-' uniqueSuffix)
}
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/422746.html
標籤:
