ZEIT现在无法读取Multer目标文件

您好,我想在我的nodejs应用中使用multer将图像上传到cloudinary,它在localhost上可以正常运行,但是当我将其上传到zeit时它不起作用,它说“ ENOENT:没有这样的文件或目录,请打开(文件夹) ” 我尝试使用@ now / static使该文件夹可用,但它也无法正常工作。如果您能帮助我,我会很高兴。

const express = require("express")
const multer = require("multer")
const cloudinary = require("cloudinary").v2
const cors = require("cors")

const config = require("../../config")
const response = require("../../network/response")
const Controller = require("./index")
const auth = require("./secure")

const router = express.Router()

cloudinary.config({
  cloud_name: config.cloudinary.name,api_key: config.cloudinary.api_key,api_secret: config.cloudinary.api_secret,})

const storage = multer.diskStorage({
  destination: function (req,file,cb) {
    cb(null,"./public/uploads")
  },filename: function (req,file.originalname)
  },})

const upload = multer({
  storage: storage,limits: { fileSize: 1024 * 1024 * 5 },})

// Set routes
router.use(cors())
router.get("/",auth("list"),list)
router.post("/",auth("add"),upload.single("file"),upsert)

// Router Functions
function list(req,res,next) {
  Controller.list()
    .then((post) => {
      response.success(req,post,200)
    })
    .catch(next)
}

function upsert(req,next) {
  const path = req.file.path
  const uniqueFilename = new Date().toISOString()

  cloudinary.uploader.upload(
    path,{ public_id: `public/${uniqueFilename}` },// directory and tags are optional
    function (err,image) {
      if (err) return res.send(err)
      console.log("file uploaded to Cloudinary")
      // remove file from server
      const fs = require("fs")
      fs.unlinkSync(path)
    }
  )

  Controller.upsert(req.body,uniqueFilename)
    .then((post) => {
      response.success(req,201)
    })
    .catch(next)
}

module.exports = router
mafanmafan_elsa 回答:ZEIT现在无法读取Multer目标文件

使用Zeit / Vercel时,您的API代码在Lambda中运行。 该lambda在执行完毕后可以被一次性使用, 因此,您在API中使用的文件系统会在上传执行结束时被破坏。

(它在本地工作,因为最后没有人破坏您的计算机:D)。

要使此方案正常工作,您需要将上传的文件写入持久的位置,例如AWS S3。

本文链接:https://www.f2er.com/2431949.html

大家都在问