【发布时间】:2016-05-29 01:09:54
【问题描述】:
我们正在与使用 Keystonejs 0.3.16 的客户端合作,以提供将文件上传到服务器文件系统的可能性(不是来自 keystone admin ui)。乍一看,这似乎微不足道,我预计这将在不到一个小时内起作用。在一直工作到午夜之后,出于这样一个事实的动机,即一旦解决这个问题我会睡得更好,我不得不暂时辞职,事实上,我的梦想因此而不稳定。你一定是个极客,活下去!然而,我相信很多人都会知道这种感觉。 我现在求助于社区和 keystonejs 作者,帮助我了解我在这里缺少什么。
我正在使用最新版本的 keystones,并且我尝试了多个库来处理作为中间件组件的多部分格式文件上传。 Multer,强大,jfum,jquery-file-upload-middleware,connect-busboy,connect-multiparty...我都做了。由于库不兼容导致一些编译错误甚至没有安装,有些人给了我大约 500 个错误,告诉我 req.status 未定义,所有其他人告诉我上传正常,但 req.body 和 req.file 留下了为空,没有下载任何内容。
我什至在 multer lib “makeMiddleware” 中添加了一些日志记录,以查看文件是否在那里被解析,但 busboy.on('file', ...) 事件从未被触发,表明正文中没有文件。
我还没有在基本的 Nodejs Express 服务器应用程序中尝试过这个,只在 keystone js 应用程序上尝试过,所以也许 keystone 以某种方式预处理 post 请求,这可以解释这种现象,例如。在文件内容到达我的中间件之前剥离文件内容?
这是我的基本形式:
<form method="post" role="form" enctype="multipart/form-data" action="/bo/lib/upload">
<input type="file" id="imageFileId" name=" imageFileName">
<input type="submit" value="Upload Image">
<form>
这里是我使用 Multer 的例子:
var upload = multer({ dest: './uploads/'});
exports = module.exports = function(app) {
app.post('/', upload.single('myimage'), function(req, res){
console.log(req.body) // returns empty ???
console.log(req.file) // returns empty ???
res.status(204).end()
}]);
};
如果有人,也许是 keystonejs 开发方面的某个人,可以帮助我理解这一点,或者更好地解决这个问题,我将非常感谢你的帮助,并且今晚一定会睡得更好;-)
【问题讨论】:
-
提供的代码中的小修正,配置的路由当然是:app.post('/bo/lib/upload', upload.single('myimage'), function(req, res)
-
你有没有解决这个问题?我正在努力将图像上传到 CloudinaryImage 字段。
-
一点建议...如果您想回答您的问题,请不要写前言。人们不想阅读故事来回答您的问题。这可能会帮助您获得更多问题的答案。
-
我想帮忙,但我不熟悉如何在本地上传。如果您使用的是 AWS 存储桶,我可能有一个解决方案。
标签: node.js file-upload keystonejs