繁体   English   中英

如何通过jQuery将文件发布到Node.js Connect-Busboy

[英]How to POST file via jQuery to nodejs connect-busboy

我可以使用HTML表单的action属性将文件成功发送到connect-busboy,如下所示:

<form ref='uploadForm' method="post" action="http://localhost:3000/fileupload" enctype="multipart/form-data" id='uploadForm'>
  Select file to upload:
  <input type="file" name="sampleFile">
  <input type="submit" value="Upload!">
</form>

但是,我不希望页面重定向。

我试图通过在表单标签中删除action属性并使用以下命令添加onclick函数来将其转换为jQuery:

$.ajax({
        url:'http://localhost:3000/fileupload',
        type:'post',
        contentType: 'multipart/form-data',
        data:$('#uploadForm').serialize(),
        success:function(){
            alert('Success');
        },
        error: function() {
            alert('Error');
        },
});

不幸的是,这不适用于错误:

TypeError:无法读取未定义的属性“ end”

Nodejs代码如下:

const express = require('express');
const busboy = require('connect-busboy');
const app = express();
app.use(busboy());
const fs = require('fs');

app.post('/fileupload', function(req, res) {
    var fstream;
    req.pipe(req.busboy);
    req.busboy.on('file', function (fieldname, file, filename) {
        console.log("Uploading: " + filename);
        fstream = fs.createWriteStream(__dirname + '/files/' + filen ame);
        console.log(fstream);
        file.pipe(fstream);
        fstream.on('close', function () {
            res.send('Success');
        });
    });
});

var port = process.env.PORT || 3000;
app.listen(port);

完整错误: http//i.imgur.com/vUqmjWS.png

通过显式序列化表单,您将隐式避免/删除multipart / form-data格式。 而是将FormData实例作为data传递。 您可以从现有表单中实例化一个新的FormData ,例如:

var data = new FormData($('#uploadForm')[0]);

$.ajax({
    url: 'http://localhost:3000/fileupload',
    type: 'POST',
    contentType: false,
    processData: false,
    cache: false,
    data: data,
    success: function() {
        alert('Success');
    },
    error: function() {
        alert('Error');
    }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM