【问题标题】:Issue with ajax file upload (Node.js, express, jQuery)ajax 文件上传问题(Node.js、express、jQuery)
【发布时间】:2014-11-30 23:27:45
【问题描述】:

我正在努力让文件上传脚本正常工作。我正在使用带有 jQ​​uery 的 node/express 后端触发 ajax 请求。

标记:

<input id="audio" type="file" name="audio">

前端JS:

var formData = new FormData();
formData.append("audio", e.data.audio, 'testname');

$.ajax({
    url: 'api/upload',
    data: formData,
    cache: false,
    contentType: false,
    processData: false,
    type: 'POST',
    success: function(data){
        alert(data);
    }
});

使用自定义编写的模块执行以下操作并将其放入 e.data.audio

if(has('fileReader')){
    return this.$input[0].files[0] || '';
}

当我选择作为小音频文件上传和提交时,e.data.audio 在设置到 ajax 函数参数对象时具有以下值:

缺乏 SO streetcred 意味着我需要将图像放在 imgur http://i.imgur.com/Mz5MNXR.png

发送请求后,我使用请求对象 (req.files) 的 files 属性来访问文件,以便保存它。

exports.upload = function(){
    return function(req, res){
        console.log(req.files);
        if (req.files && req.files.audio){
            var file = req.files.audio;
            fs.readFile(file.path, function(err, data){
                if (err){
                    res.send(err);
                }
                var newPath = __dirname + 'public/audio';
                fs.writeFile(newPath, data, function(err){
                    if (err){
                        res.send(err);
                    }else{
                        res.send(true);
                    }
                });

            })
        }else{

        }
    }
};

但问题是路径似乎总是客户端本地路径。

缺乏 SO streetcred 意味着我需要将图像放在 imgur http://i.imgur.com/9e82Xv1.png

我已经进行了大量的谷歌搜索,但似乎找不到任何相同的内容。我显然只是缺少一些基本的东西,需要有人指出我正确的方向。

【问题讨论】:

    标签: javascript jquery ajax node.js file-upload


    【解决方案1】:

    file.path 是在保存上传文件数据的服务器上创建的临时文件的路径,它不是上传者系统中文件的路径。

    在不相关的注释中,__dirname 不包含尾部斜杠,因此您可能需要这样:

    var newPath = __dirname + '/public/audio';
    

    代替:

    var newPath = __dirname + 'public/audio';
    

    此外,您可能应该使用fs.rename 来移动文件,而不是将整个文件读入内存然后再将其写回。示例:

    var file = req.files.audio;
    
    fs.rename(file.path, __dirname + '/public/audio', function(err) {
      res.send(err ? err : true);
    });
    

    【讨论】:

    • 问题在于路径没有尾部斜杠,而不是与服务器上的临时文件有关。非常感谢您的帮助!
    • req.files 始终是undefined,对此有何建议?
    猜你喜欢
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    相关资源
    最近更新 更多