javascript - 在没有 express.js 的情况下将图像保存到 node.js 服务器

标签 javascript html node.js upload save

所以我一直在想如何在不使用express的情况下将图像保存到node.js服务器。(刚刚学习node并且想自己做所有事情来更好地学习node,没有express)。

到目前为止,我有一个带有图像的表单作为我随发帖请求发送的唯一输入。这是我目前在我的服务器上拥有的,它没有记录任何内容。

if(req.method === 'POST') {

    if (req.url === '/upload') {

        req.on('error', function(e) {
          console.log('Problem with request: ' + e.message);
        });

        res.writeHead(200, {'Content-Type': 'image/jpg; charset=utf8'});

        req.on('data', function (chunk) {

            fs.writeFile(__dirname + "/uploads/dada.jpg", chunk, function(err) {
                if(err) {
                    console.log(err);
                } else {
                    console.log("The file was saved!");
                }
            }); 
        });
    }
}

这是我的表格:

<form method="post" action="/upload" enctype="multipart/form-data">

编辑: 我修复了大部分问题,但文件仅保存为图像,无法像图像一样查看。 (我猜内容类型有问题,但不知道如何解决) Here是我整个应用程序的 fiddle 。我知道我需要将它分成不同的模块,但我稍后会这样做

最佳答案

我完全忘记了这个老问题,但现在我看到它有很多观点,这是我找到的解决方案:

var port = 1357;

var http = require('http'),
    path = require('path'),
    mime = require('mime'),
    fs = require('fs'),
    GUID = require('GUID'),
    formidable = require('formidable'),
    util = require('util');

var app = http.createServer(function (req, res) {

    if (req.method === 'POST') {

        if (req.url === '/upload') {

            req.on('error', function (e) {
                console.log('Problem with request: ' + e.message);
            });

            var fileDirectory = __dirname + '/db/',
                form = new formidable.IncomingForm();

            form.keepExtensions = true;
            form.uploadDir =fileDirectory;

            form.parse(req, function (err, fields, files) {

                if (err) throw (err);

                var pic = JSON.stringify(util.inspect(files)),
                    upIndx = pic.indexOf('db'),
                    path = pic.slice(upIndx + 6, upIndx + 42);

                res.writeHead(200, {
                    'Content-Type': 'text/html'
                });
                fs.readFile('views/index.html', function (err, page) {
                    res.writeHead(200, {
                        'Content-Type': 'text/html'
                    });
                    res.write(page);
                    res.write('<div>Download Link: </div><div>' + fileDirectory + path + '</div>');
                    res.end();
                });
            });

        }
    } else {

        //not important for question, handle other request
    }

});

app.listen(port);
console.log('Server running on port: ' + port)

关于javascript - 在没有 express.js 的情况下将图像保存到 node.js 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23409750/

相关文章:

javascript - onclick 如果满足条件则使用 setTimeout 重定向

javascript - 使用D3 data().enter()

javascript - 关闭JavaScript html中的功能

javascript - 通过JS从HTML原始DIV文本中提取div数据

javascript - 如何获取 mongodb 聚合上所有条目的对象数组的值重复计数

javascript - 如何修复 "TypeError: Cannot set property ' 已批准“为空”?

javascript - 为什么这个洗牌算法没有偏差

php - 如何使用user_id从另一个表获取数据

node.js - 使用 mongoose 按日期发出排序

node.js - Visual Studio Team Services Azure 部署(无法对指定目录执行操作 ("Delete File")