node上传文件

nodejs上传文件取不到数据?

nodejs上传文件req.body是个空的?

这些问题我都遇到了,哈哈哈

nodejs上传文件功能,搞了两天了,一直搞不好,用谷歌大法也研究了好久,我就是不行

今天终于搞好了,但是我还是不知道,前面这么久我到底哪里搞错了,

前端

<input type="file" class="uploader" id="file"  name="file" accept="image/*"  multiple>

本来使用base64上传的,但是无奈,传输的数据太大,上传不了

只好使用FormData,就这个鸡毛玩意,搞了两天了,一直不行

//监听文件
$('.uploader').change(function () {
                // 获取当前选中的文件
                var file = this.files;  //读取文件
                var form = new FormData();
                //这里一定加个index,file[0],我就是测试好多遍,一开始直接写file,横竖都不行
                 // 或者多图上传用each遍历,
                form.append("file",file[0]);
                console.log(form);

                $.ajax({
                    type:'post',
                    url: "/upload",
                    data:form,
                    contentType: false, // 注意这里应设为false
                    processData: false,    //false
                    cache: false,    //缓存
                    success: function(r){
                      
                    }
                })


            })

后端

后端框架我是用的express

使用中间件上传,由于FormData上传是2进制字符串上传的,直接是取不到数据的,会返回个空对象{}

前面我并不知道要用其他东西辅助上传,不管怎么弄都是一个空的对象,搞死了

一开始用的connect-multiparty这个中间件,但是没能搞定

于是这里我使用的是formidable中间件,也有很多其他的,大同小异,能用就行

formidable这个也试了很多次,前面几次都不行,最后经我百般调试,居然可以了

先安装formidable

$ npm install formidable

调用formidable

var formidable = require('formidable');
/* 添加文章 */
router.post('/upload', function(req, res, next) {


    var form = new formidable.IncomingForm();   //创建上传表单
    form.encoding = 'utf-8';        //设置编辑
   // form.uploadDir = 'public/avatar/';     //设置上传目录
   form.keepExtensions = true;     //保留后缀
    form.maxFieldsSize = 2 * 1024 * 1024;   //文件大小

    form.parse(req, function(err, fields, files) {
       // console.log(fields);

        if (err) {
            return;
        }
        console.log(files.file);
///
////
/////
//////在这里可以做大事情了.....

       
    });

不使用中间件的话,首先取不到数据,更打印不出来

打印出来的file信息,

其中path就是关键了,我要的就是path,path是上传的缓存路径

{ file:
   File {
     _events: {},
     _eventsCount: 0,
     _maxListeners: undefined,
     size: 38160,
     path:
      'C:\\Users\\admin\\AppData\\Local\\Temp\\upload_68dcab3f773f0152bab5bf87fe0f3ed3.jpg',
     name: 'timg (3).jpg',
     type: 'image/jpeg',
     hash: null,
     lastModifiedDate: 2018-11-01T05:36:46.212Z,
     _writeStream:
      WriteStream {
        _writableState: [WritableState],
        writable: false,
        _events: {},
        _eventsCount: 0,
        _maxListeners: undefined,
        path:
         'C:\\Users\\admin\\AppData\\Local\\Temp\\upload_68dcab3f773f0152bab5bf87fe0f3ed3.jpg',
        fd: null,
        flags: 'w',
        mode: 438,
        start: undefined,
        autoClose: true,
        pos: undefined,
        bytesWritten: 38160,
        closed: false } } }

相关更多问题请使用谷歌大法进入深成研究:谷歌大法传送门