美文网首页
七牛云使用Node+connect-multiparty+req

七牛云使用Node+connect-multiparty+req

作者: 黄秀杰 | 来源:发表于2019-12-21 21:59 被阅读0次

    步骤

    • connect-multiparty拿出临时缓存文件
    • 换取qiniu的token上传凭证
    • request.js/needle.js模块上传

    方法一,使用request.js模块

    // 临时文件完整路径
        var file_url = req.files.file.path;
        // 截取文件名
        var filename = path.basename(file_url);
        console.log(filename)
    
        // 获取后缀名
        var mimeTypes = {
            ai: "application/postscript",
            aif: "audio/x-aiff",
            aifc: "audio/x-aiff",
            aiff: "audio/x-aiff",
            asc: "text/plain",
            atom: "application/atom+xml",
            au: "audio/basic",
            avi: "video/x-msvideo",
            bcpio: "application/x-bcpio",
            bin: "application/octet-stream",
            bmp: "image/bmp",
            cdf: "application/x-netcdf",
            cgm: "image/cgm",
            "class": "application/octet-stream",
            cpio: "application/x-cpio",
            cpt: "application/mac-compactpro",
            csh: "application/x-csh",
            css: "text/css",
            dcr: "application/x-director",
            dif: "video/x-dv",
            dir: "application/x-director",
            djv: "image/vnd.djvu",
            djvu: "image/vnd.djvu",
            dll: "application/octet-stream",
            dmg: "application/octet-stream",
            dms: "application/octet-stream",
            doc: "application/msword",
            docx: "application/vnd.openxmlformats-officedocument.wordprocessingml." +
                "document",
            dotx: "application/vnd.openxmlformats-officedocument.wordprocessingml." +
                "template",
            docm: "application/vnd.ms-word.document.macroEnabled.12",
            dotm: "application/vnd.ms-word.template.macroEnabled.12",
            dtd: "application/xml-dtd",
            dv: "video/x-dv",
            dvi: "application/x-dvi",
            dxr: "application/x-director",
            eps: "application/postscript",
            etx: "text/x-setext",
            exe: "application/octet-stream",
            ez: "application/andrew-inset",
            gif: "image/gif",
            gram: "application/srgs",
            grxml: "application/srgs+xml",
            gtar: "application/x-gtar",
            hdf: "application/x-hdf",
            hqx: "application/mac-binhex40",
            htm: "text/html",
            html: "text/html",
            ice: "x-conference/x-cooltalk",
            ico: "image/x-icon",
            ics: "text/calendar",
            ief: "image/ief",
            ifb: "text/calendar",
            iges: "model/iges",
            igs: "model/iges",
            jnlp: "application/x-java-jnlp-file",
            jp2: "image/jp2",
            jpe: "image/jpeg",
            jpeg: "image/jpeg",
            jpg: "image/jpeg",
            js: "application/x-javascript",
            kar: "audio/midi",
            latex: "application/x-latex",
            lha: "application/octet-stream",
            lzh: "application/octet-stream",
            m3u: "audio/x-mpegurl",
            m4a: "audio/mp4a-latm",
            m4b: "audio/mp4a-latm",
            m4p: "audio/mp4a-latm",
            m4u: "video/vnd.mpegurl",
            m4v: "video/x-m4v",
            mac: "image/x-macpaint",
            man: "application/x-troff-man",
            mathml: "application/mathml+xml",
            me: "application/x-troff-me",
            mesh: "model/mesh",
            mid: "audio/midi",
            midi: "audio/midi",
            mif: "application/vnd.mif",
            mov: "video/quicktime",
            movie: "video/x-sgi-movie",
            mp2: "audio/mpeg",
            mp3: "audio/mpeg",
            mp4: "video/mp4",
            mpe: "video/mpeg",
            mpeg: "video/mpeg",
            mpg: "video/mpeg",
            mpga: "audio/mpeg",
            ms: "application/x-troff-ms",
            msh: "model/mesh",
            mxu: "video/vnd.mpegurl",
            nc: "application/x-netcdf",
            oda: "application/oda",
            ogg: "application/ogg",
            pbm: "image/x-portable-bitmap",
            pct: "image/pict",
            pdb: "chemical/x-pdb",
            pdf: "application/pdf",
            pgm: "image/x-portable-graymap",
            pgn: "application/x-chess-pgn",
            pic: "image/pict",
            pict: "image/pict",
            png: "image/png",
            pnm: "image/x-portable-anymap",
            pnt: "image/x-macpaint",
            pntg: "image/x-macpaint",
            ppm: "image/x-portable-pixmap",
            ppt: "application/vnd.ms-powerpoint",
            pptx: "application/vnd.openxmlformats-officedocument.presentationml." +
                "presentation",
            potx: "application/vnd.openxmlformats-officedocument.presentationml." +
                "template",
            ppsx: "application/vnd.openxmlformats-officedocument.presentationml." +
                "slideshow",
            ppam: "application/vnd.ms-powerpoint.addin.macroEnabled.12",
            pptm: "application/vnd.ms-powerpoint.presentation.macroEnabled.12",
            potm: "application/vnd.ms-powerpoint.template.macroEnabled.12",
            ppsm: "application/vnd.ms-powerpoint.slideshow.macroEnabled.12",
            ps: "application/postscript",
            qt: "video/quicktime",
            qti: "image/x-quicktime",
            qtif: "image/x-quicktime",
            ra: "audio/x-pn-realaudio",
            ram: "audio/x-pn-realaudio",
            ras: "image/x-cmu-raster",
            rdf: "application/rdf+xml",
            rgb: "image/x-rgb",
            rm: "application/vnd.rn-realmedia",
            roff: "application/x-troff",
            rtf: "text/rtf",
            rtx: "text/richtext",
            sgm: "text/sgml",
            sgml: "text/sgml",
            sh: "application/x-sh",
            shar: "application/x-shar",
            silo: "model/mesh",
            sit: "application/x-stuffit",
            skd: "application/x-koan",
            skm: "application/x-koan",
            skp: "application/x-koan",
            skt: "application/x-koan",
            smi: "application/smil",
            smil: "application/smil",
            snd: "audio/basic",
            so: "application/octet-stream",
            spl: "application/x-futuresplash",
            src: "application/x-wais-source",
            sv4cpio: "application/x-sv4cpio",
            sv4crc: "application/x-sv4crc",
            svg: "image/svg+xml",
            swf: "application/x-shockwave-flash",
            t: "application/x-troff",
            tar: "application/x-tar",
            tcl: "application/x-tcl",
            tex: "application/x-tex",
            texi: "application/x-texinfo",
            texinfo: "application/x-texinfo",
            tif: "image/tiff",
            tiff: "image/tiff",
            tr: "application/x-troff",
            tsv: "text/tab-separated-values",
            txt: "text/plain",
            ustar: "application/x-ustar",
            vcd: "application/x-cdlink",
            vrml: "model/vrml",
            vxml: "application/voicexml+xml",
            wav: "audio/x-wav",
            wbmp: "image/vnd.wap.wbmp",
            wbmxl: "application/vnd.wap.wbxml",
            wml: "text/vnd.wap.wml",
            wmlc: "application/vnd.wap.wmlc",
            wmls: "text/vnd.wap.wmlscript",
            wmlsc: "application/vnd.wap.wmlscriptc",
            wrl: "model/vrml",
            xbm: "image/x-xbitmap",
            xht: "application/xhtml+xml",
            xhtml: "application/xhtml+xml",
            xls: "application/vnd.ms-excel",
            xml: "application/xml",
            xpm: "image/x-xpixmap",
            xsl: "application/xml",
            xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            xltx: "application/vnd.openxmlformats-officedocument.spreadsheetml." +
                "template",
            xlsm: "application/vnd.ms-excel.sheet.macroEnabled.12",
            xltm: "application/vnd.ms-excel.template.macroEnabled.12",
            xlam: "application/vnd.ms-excel.addin.macroEnabled.12",
            xlsb: "application/vnd.ms-excel.sheet.binary.macroEnabled.12",
            xslt: "application/xslt+xml",
            xul: "application/vnd.mozilla.xul+xml",
            xwd: "image/x-xwindowdump",
            xyz: "chemical/x-xyz",
            zip: "application/zip"
        };
        var extension = /\.([^.]*)$/.exec(filename);
        if (extension) {
            extension = extension[1].toLowerCase();
        }
        var mime = mimeTypes[extension];
    
    /*获取token*/
        const qiniu = require("qiniu");
        const proc = require("process");
    
        var accessKey = 'UCrj2D3zY_kzrhf37lnYUiAxFbnC2-hrkxQ7cH1e';
        var secretKey = 'NuiKI6v6WFXUbDaWQGGKUu1fFAAfR6d8inxi6Nnj';
        var bucket = 'lendoo';
        var mac = new qiniu.auth.digest.Mac(accessKey, secretKey);
        var putPolicy = new qiniu.rs.PutPolicy({
            scope: bucket
        });
    
        var uploadToken = putPolicy.uploadToken(mac);
        console.log(uploadToken);
        var formData = {
            // Pass data via Streams
            file: fs.createReadStream(file_url),
            token: uploadToken,
            content_type: mime
        };
    
          /* 通过request七牛上传 */
        var request = require('request');
        request.post({
            url: 'http://upload.qiniu.com',
            formData: formData
        }, function optionalCallback(err, httpResponse, body) {
            if (err) {
                return console.error('upload failed:', err);
            }
            var body = JSON.parse(body);
            var result = {
                filename: filename,
                url: 'http://oe37p1ndi.bkt.clouddn.com/' + body.hash
            };
            res.send(result);
        });
    

    方法二,使用needle.js模块

        var needle = require('needle');
        var data = {
            file: { file: file_url, content_type: mimeTypes[extension] },
            token: uploadToken
        }
        var options = {
            multipart: true
        }
        needle.post('http://upload.qiniu.com', data, options, function(err, resp, body) {
            if (err) {
                console.log(err);
            }
            console.log(body);
            var result = {
                filename: filename,
                url: 'http://oe37p1ndi.bkt.clouddn.com/' + body.hash
            };
            res.send(result);
        });
    
    

    相关文章

      网友评论

          本文标题:七牛云使用Node+connect-multiparty+req

          本文链接:https://www.haomeiwen.com/subject/wsezmxtx.html