Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否将文件从客户端浏览器上载到mongodb或磁盘?_Javascript_Node.js_Mongodb_Express_Busboy - Fatal编程技术网

Javascript 是否将文件从客户端浏览器上载到mongodb或磁盘?

Javascript 是否将文件从客户端浏览器上载到mongodb或磁盘?,javascript,node.js,mongodb,express,busboy,Javascript,Node.js,Mongodb,Express,Busboy,我在使用node.js和express framework上传文件时遇到问题 下面是我的app.js代码: var express = require('express'); var fs = require('fs'); var busboy = require('connect-busboy'); var app = express(); app.use(busboy()); app.post('/fileupload', function(req, res) { var fs

我在使用node.js和express framework上传文件时遇到问题

下面是我的app.js代码:

var express = require('express');
var fs = require('fs');
var busboy = require('connect-busboy');

var app = express();

app.use(busboy());

app.post('/fileupload', function(req, res) {
    var fstream;
    console.log(req.filename);
    req.pipe(req.busboy);   
    req.busboy.on('file', function (fieldname, file, filename) {
        console.log("Uploading: " + filename); 
        fstream = fs.createWriteStream(__dirname + '/public/' + filename);
        file.pipe(fstream);
        fstream.on('close', function () {
            res.redirect('back');
        });
    });
});
HTML代码是

<form id="uploadForm" enctype="multipart/form-data" action="/fileupload" method="post">
    <div class="azureD" style="display:none;">
        <div class="pull-left">
            <label class="labelTemp">Subscription ID</label>
            <div class="clickRole addStoTabWid">
                <input type="text" id="" placeholder="" style="border:none;width:100%;">    
            </div>
        </div>
        <div class="pull-left">
            <label class="labelTemp">Upload .pem file</label>
            <div class="clickRole addStoTabWid">
                <input type="file" name="file" id="file" placeholder="" style="border:none;width:100%;">
            </div>
        </div>
        <div class="modal-footer">
        </br>
        <input type="submit" value="Upload" name="submit">
    </div>
</form>
我已经检查了所有我无法用我的代码修复此问题的内容,请帮助我解决此问题


我想知道是否有其他替代方法可以从浏览器上传文件并将其存储到mongodb或localdisk中

看起来
fstream
未定义,因为
file.pipe()
导致了错误。确保传递到
fs.createWriteStream()
文件路径是正确的

使用以下代码段。它适合你

var upload_path = path.resolve(__dirname + '../../../public/uploads');
var result = {
    status: 0,
    message: '',
    data: ''
};
fs.readFile(req.files.file.path, function (err, data) {

    var imageName = Date.now() +"_"+req.files.file.name;

    /// If there's an error
    if(err){
        //error
    } else {
        var newPath = path.resolve(upload_path, imageName);

        fs.writeFile(newPath, data, function (err) {
            if(err) {
               //error
            } else {
                fs.unlink(req.files.file.path, function() {
                    if (err) {
                        result.status = -1;
                        result.message = err;
                    } else {
                        result.data = imageName;
                    }
                    res.jsonp(result);
                });
            }
        });
    }
});

请在我需要添加此代码段的地方进行详细说明。.提前谢谢,而且在添加您的代码后,我也面临此问题。.write(字符串、编码、偏移量、长度)已被弃用。请改用write(字符串[、偏移量[、长度]][、编码]。“用after app.post('/fileupload',function(req、res){write(字符串)替换此代码。”[,偏移量[,长度]][,编码])。这是由于express和node版本造成的。您的express版本较高。请您将我的答案标记为正确。谢谢
var upload_path = path.resolve(__dirname + '../../../public/uploads');
var result = {
    status: 0,
    message: '',
    data: ''
};
fs.readFile(req.files.file.path, function (err, data) {

    var imageName = Date.now() +"_"+req.files.file.name;

    /// If there's an error
    if(err){
        //error
    } else {
        var newPath = path.resolve(upload_path, imageName);

        fs.writeFile(newPath, data, function (err) {
            if(err) {
               //error
            } else {
                fs.unlink(req.files.file.path, function() {
                    if (err) {
                        result.status = -1;
                        result.message = err;
                    } else {
                        result.data = imageName;
                    }
                    res.jsonp(result);
                });
            }
        });
    }
});