如何通过cyclic.sh上传文件到只读文件系统?



运行express server时无法从UI上传文件。

同样的代码在heroku上工作,使用mkdirp模块。https://www.npmjs.com/package/mkdirp

出现以下错误:

2022-11-23 14:04:30.748: /var/task/node_modules/multer/node_modules/mkdirp/index.js:91
throw err0;
^
Error: EROFS: read-only file system, mkdir '/var/task/public/uploads'
at Object.mkdirSync (node:fs:1349:3)
at sync (/var/task/node_modules/multer/node_modules/mkdirp/index.js:72:13)
at Function.sync (/var/task/node_modules/multer/node_modules/mkdirp/index.js:78:24)
at new DiskStorage (/var/task/node_modules/multer/storage/disk.js:21:12)
at module.exports (/var/task/node_modules/multer/storage/disk.js:65:10)
at new Multer (/var/task/node_modules/multer/index.js:15:20)
at multer (/var/task/node_modules/multer/index.js:95:12)
at Object.<anonymous> (/var/task/routes/cards.js:29:16)
at Module._compile (node:internal/modules/cjs/loader:1105:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1159:10)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Module.require (node:internal/modules/cjs/loader:1005:19)
at require (node:internal/modules/cjs/helpers:102:18)
at Object.<anonymous> (/var/task/server.js:40:20)
at Module._compile (node:internal/modules/cjs/loader:1105:14) {
errno: -30,
syscall: 'mkdir',
code: 'EROFS',
path: '/var/task/public/uploads'
}
2022-11-23 14:04:30.765: 
ERROR: Failed to run "npm run start". Start script defined in package.json:
"scripts": {
"start":  "node server.js"
...

Exited with code: 1

在取消免费层之前,代码可以在local和heroku上运行。

Cyclic基于无服务器技术(AWS Lambda)构建,这使得文件系统是只读的。唯一可写的目录是/tmp。但是,由于lambda实例可以随时关闭/回收,因此不应该将其用于永久存储。

要永久写入文件,要么写入集成的S3桶,要么为用户提供一个预先签名的URL,他们可以将文件上传到该URL。

有关使用无服务器基础设施上传文件的更多信息,请访问以下文档:https://docs.cyclic.sh/serverless/stateless#file-upload

相关内容

最新更新