首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么不在node.js中上传图片?

为什么不在node.js中上传图片?
EN

Stack Overflow用户
提问于 2016-02-03 15:07:33
回答 1查看 214关注 0票数 0

我正在学习node.js,并试图使用express和multer制作一个简单的图像上传应用程序来上传单个图像,重命名并保存它。

以下是相关部分:

代码语言:javascript
复制
app.use(multer({dest:'/home/pc/node-dev/mypapp/public/upload/temp'}).single('file'));

表单:

代码语言:javascript
复制
<form method="post" action="/images" enctype="multipart/form-data">

            <input class="form-control" type="file" name="file">

                <textarea class="form-control" name="description" rows="2"></textarea>

                <button type="submit" id="login-btn" class="btn btn-success" type="button">Upload Image</button>

</form>

在in‍‍images.js中,我有::

代码语言:javascript
复制
 create: function(req, res) {
            var saveImage = function() {
                console.log('saving image');
                console.log(req.body);
                console.log(req.file.path);
                var possible = 'abcdefghijklmnopqrstuvwxyz0123456789',
                    imgUrl = '';

                for(var i=0; i < 6; i+=1) {
                    imgUrl += possible.charAt(Math.floor(Math.random() * possible.length));
                }

                var tempPath = req.file.path,
                    ext = path.extname(req.file.name).toLowerCase(),
                    targetPath = path.resolve('/home/pc/node-dev/myapp/public/upload/' + imgUrl + ext);
                    console.log('imgUrl is %s', imgUrl );
                    console.log('targetPath is %s', targetPath );
                    console.log('filename is %s', req.file.name );
                    console.log('ext is %s', ext );

                if (ext === '.png' || ext === '.jpg' || ext === '.jpeg' || ext === '.gif') {


                    fs.rename(tempPath, targetPath, function(err) {
                        if (err) throw err;

                        res.redirect('/images/' + imgUrl);
                    });
                } else {
                    fs.unlink(req.file.path, function () {
                        console.log(req.file.path);

                        res.json(500, {error: 'Only image files are allowed.'});
                    });
                }
            };

我在控制台中得到的结果是:

代码语言:javascript
复制
saving image
{ title: 'ddd', description: 'adwefw' }
/home/pc/node-dev/myapp/public/upload/temp/5b43a0abf25d9b05cf902d64b051a307
imgUrl is 6dnfws
targetPath is /home/pc/node-dev/myapp/public/upload/6dnfws
filename is undefined
ext is 

并在浏览器中呈现此页面:

代码语言:javascript
复制
{"error":"Only image files are allowed."}

所以一方面有一个req.file.path,另一方面,显然没有req.file.name

我对此真的很困惑,所以感谢你的提示。

EN

回答 1

Stack Overflow用户

发布于 2016-02-03 15:40:14

您需要originalname (用户计算机上的文件名):

代码语言:javascript
复制
ext = path.extname(req.file.originalname).toLowerCase()

https://github.com/expressjs/multer#file-information

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35170582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档