Я пытаюсь загрузить файлы с локального хранилища в облачное использование Multer, и хотя у меня создается папка Public/Temp и добавлено изображение, когда я пытаюсь разместить информацию, используя почтальон, чтобы проверить свой код, я получаю следующую ошибку.
multer.middleware.js.import multer from "multer"
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, "./public/temp")
},
filename: function (req, file, cb) {
cb(null, file.originalname)
}
})
export const upload = multer({
storage,
})
< /code>
user.routes.js
import {Router} from 'express'
import {registerUser} from '../controllers/user.controller.js'
import {upload} from '../middlewares/multer.middleware.js'
const router = Router()
router.route("/register").post(
upload.any(),
registerUser
)
export default router
< /code>
user.controller.js
import {asyncHandler} from '../utils/asyncHandler.js'
import {apiError} from '../utils/apiError.js'
import {User} from '../models/user.model.js'
import {uploadOnCloudinary} from '../utils/cloudinary.js'
import {apiResponse} from '../utils/apiResponse.js'
const registerUser = asyncHandler(async (req,res)=>{
const {username,password,email,fullName} = req.body
console.log("Email: ",email);
console.log("req.files:", req.files);
console.log("req.body:", req.body);
if([fullName,username,email,password].some((field)=>field?.trim()==="")){
throw new apiError(400, "All fields are required")
}
const existedUser = await User.findOne({
$or: [{ username },{ email }]
})
if(existedUser){
throw new apiError(409, "User with email or password already exists")
}
const avatarLocalPath = req.files?.avatar[0]?.path;
let coverimageLocalPath;
if (req.files && Array.isArray(req.files.coverimage) && req.files.coverimage.length > 0) {
coverimageLocalPath = req.files.coverimage[0].path
}
if(!avatarLocalPath){
throw new apiError(400,"Avatar file is required")
}
const avatar = await uploadOnCloudinary(avatarLocalPath);
const coverimage = await uploadOnCloudinary(coverimageLocalPath);
if(!avatar){
throw new apiError(400,"Avatar file is required");
}
const user = await User.create({
fullName,
avatar:avatar.url,
coverImage: coverimage?.url||"",
email,
password,
username: username.toLowerCase()
})
const createdUser = await User.findById(user._id).select(
"-password -refreshToken"
)
if(!createdUser){
throw new apiError(500,"Something went wrong while registering the user")
}
return res.status(201).json(
new apiResponse(200, createdUser, "User registered Successfully")
)
})
export {registerUser}
< /code>
clodinary.js
import {v2 as cloudinary} from "cloudinary"
import fs from "fs"
cloudinary.config({
cloud_name: process.env.CLOUDINARY_CLOUD_NAME,
api_key: process.env.CLOUDINARY_API_KEY,
api_secret: process.env.CLOUDINARY_API_SECRET
});
const uploadOnCloudinary = async(localFilePath)=>{
try{
if(!localFilePath) return null;
const response = await cloudinary.uploader.upload(localFilePath,{
resource_type:"auto"
})
console.log("file has been uploaded to cloudinary: ",response.url);
return response
}catch(error){
fs.unlinkSync(localFilePath);
return null;
}
}
export {uploadOnCloudinary}
< /code>
Я пробовал много ресурсов, чтобы исправить этот код, но, кажется, ничего не работает < /p>
Я изменил user.routes.js с < /p>
upload.fields([
{
name: "avatar",
maxCount: 1
},
{
name: "coverImage",
maxCount: 1
}
])
< /code>
к указанному выше, но ошибка все еще сохраняется, я проверил оболочку «аватара» и «Covermage» в почтальстве и в моем коде, и это та же самая, но ошибка все еще остается прежней. Любые предложения о том, как это исправить.
Подробнее здесь: https://stackoverflow.com/questions/797 ... temp-1-png