我在将本地图片上传到我的Google云存储时遇到问题。
我已经尝试了两种方法。第一个是通过multer上传
var storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, './uploads/')
},
filename: (req, file, cb) => {
cb(null, file.fieldname + '-' + Date.now())
}
});
var upload = multer({storage: storage}).single('image');
app.post('/upload',function(req,res,next){
upload(req,res,(err) => {
if(err){
console.log(err)
}else{
console.log(req.file)
}
})
})
然后,我已经直接尝试使用GCS
var bucket = admin.storage().bucket('mybucket')
app.post('/upload',function(req,res,next){
bucket
.save(file)
.then(() => {
})
对于这两种解决方案,req.files
始终为undefined
,而req.body
是这样的缓冲区:
<Buffer 2d 2d 2d 2d ...>
当我尝试将此缓冲区保存到我的GCS存储桶中时,我的存储桶中创建了.jpg / png文件,但该文件已损坏。
我正在浏览Web寻求解决方案,但没有发现任何可以帮助我克服这种情况的方法。
有什么建议吗?
答案 0 :(得分:0)
如果您有其他表单值,则需要multer,multer-google-storage和当然bodyParser。您需要以multipart / form-data发送数据
在您的.env文件中
GCS_BUCKET = <bucket name>
GCLOUD_PROJECT = <project id>
GCS_KEYFILE = <key file location>
您可以从GCP控制台>您的项目> I AM&Admin>服务帐户下载密钥文件
在您的路线上
const multer = require('multer');
const multerGoogleStorage = require("multer-google-storage");
var uploadHandler = multer({
storage: multerGoogleStorage.storageEngine()
});
router.post('/', uploadHandler.single('image'), function (req, res, next) {
const body = req.body;
res.json({fileName: req.file.filename});
res.end();
}
这会将名称为[random-string-generated-by-gcs] _ [您的文件名称带有扩展名]的文件存储到GCS上。可以通过req.file.filename在路由下进行相同的访问。
答案 1 :(得分:0)
确保已将enctype="multipart/form-data"
属性添加到表单中。 req.files
是undefined
的可能原因。