heroku ENOENT:上传时没有这样的文件或目录

时间:2021-04-02 10:46:58

标签: node.js mongodb express heroku multer

如果你能帮忙,我有问题, 我已经在 heroku 上部署了我的应用程序,当我在本地主机上启动时上传产品图片时,它在本地主机上正常工作,一切正常,图片被添加到我的公共文件夹,网址被传递到我的产品图片网址字段,但是在执行时在heroku部署的应用程序上显示相同:“ENOENT:没有这样的文件或目录,打开'public/obNHUnF85G2kHtApYvix5D-1200-80-1617359184714.png” 提前谢谢

这是我的 app.js

 the quantity  before is 9
 the id before is 1
 the quantity  before is 10
 the id before is 2
 the quantity inside is 10
 the id after is 2
 the quantity inside is 10
 the id after is 2
 the quantity after is 10
 the id after is 2
 the quantity after is 10
 the id after is 2

我的上传路由器

const express = require('express')
const morgan = require('morgan')
const mongoose = require('mongoose')
const jwt = require('jsonwebtoken');
var cors = require('cors')

const errorHandler = require('./middleware/error')
const app = express()
var corsOptions = {
    origin: "*",
    optionsSuccessStatus: 200 // some legacy browsers (IE11, various SmartTVs) choke on 204
}
app.use(cors(corsOptions))
app.use(express.static('public'))
app.use(express.json())
app.use(morgan('tiny'))
require('dotenv/config')
const productRouter = require('./Routes/ProductRouter')
const categoryRouter = require('./Routes/CategoryRouter');
const authRoute = require('./Routes/auth');
const userRoute = require('./Routes/user');
const OrderRouter = require('./Routes/OrderRouter');
const imagesRouter = require('./Routes/addImagesRoute');
const { static } = require('express');
const apiUrl = process.env.API_URL

const port = process.env.PORT;

mongoose
    .connect(process.env.CONNECTION_STRING, {
        useUnifiedTopology: true,
        useNewUrlParser: true
    })
    .then(() => {
        console.log('connected successfully')
    })
    .catch(err => {
        console.log(err)
    })

app.use(`${apiUrl}/products`, productRouter)
app.use(`${apiUrl}/categories`, categoryRouter)
app.use(`${apiUrl}/auth`, authRoute)
app.use(`${apiUrl}/users`, userRoute)
app.use(`${apiUrl}/orders`, OrderRouter)
app.use(`${apiUrl}/images`, imagesRouter)

app.use(errorHandler);

app.listen(port, () => console.log(`Example app listening on port ${port}!`))

添加url和hash函数

const express = require('express')
const { uploadImage, uploadGalleryImages } = require('../controllers/uploadController')
const { authorize, protect } = require('../middleware/auth')
const uploadRouter = express.Router()
const multer = require('multer')
const path = require('path')
const FILE_TYPE_MAP = {
    'image/png': 'png',
    'image/jpeg': 'jpeg',
    'image/jpg': 'jpg'
}

const storage = multer.diskStorage({
    destination: function(req, file, cb) {
        const isValid = FILE_TYPE_MAP[file.mimetype]
        let uploadError = new Error('invalid image type')

        if (isValid) {
            uploadError = null
        }
        cb(uploadError, 'public/')
    },
    filename: function(req, file, cb) {
        const fileName = file.originalname.split(' ').join('-')
        const extension = FILE_TYPE_MAP[file.mimetype]
        cb(null, `${fileName.split('.', 1)}-${Date.now()}${path.extname(file.originalname)}`)
    }
})

const uploadOptions = multer({ storage: storage })

uploadRouter.use(protect)
uploadRouter.use(authorize('publisher', 'admin'))

uploadRouter.post(
    '/:productId/image',
    uploadOptions.single('image'),
    uploadImage
);

uploadRouter.put('/:productId/images', uploadOptions.array('images', 8), uploadGalleryImages);

module.exports = uploadRouter;

0 个答案:

没有答案
相关问题