node中上传文件【base64文件流+插件调用】两种方式
来源:互联网 发布:mysql 级联删除 编辑:程序博客网 时间:2024/06/05 17:25
--所需模块
安装模块 npm install
封装upload类
/** * 上传图片公共类 */var os = require('os');var formidable = require('formidable'), util = require('util'), fs = require('fs');var request = require('request');var path = require('path');var config = require('../config');var publicReq = require('./public');var crypto = require('crypto');var md5 = crypto.createHash('md5');var date = new Date();var year = date.getFullYear();var month = date.getMonth() + 1;var day = date.getDate();var adUrl = config.realUrl + 'public/uploads/ad';var yearurl = config.realUrl + 'public/uploads/ad/' + year;var monthurl = config.realUrl + 'public/uploads/ad/' + year + '/' + month;var dayurl = config.realUrl + 'public/uploads/ad/' + year + '/' + month + '/' + day;var sizeOf = require('image-size');//递归创建目录 同步方法function mkdirsSync(dirname){if(fs.existsSync(dirname)){return true;}else{if(mkdirsSync(path.dirname(dirname))){fs.mkdirSync(dirname);return true;}}}exports.upload = function(req, res){var accountId = req.session.scsInfor.accountInfo.accountId;mkdirsSync(dayurl);var dir = dayurl + '/';var dirs = '/uploads/ad/' + year + '/' + month + '/' + day + '/';var ms = Date.parse(date);var form = new formidable.IncomingForm(), files = [], fields = [], docs = [], filea = [];//存放目录form.uploadDir = dir;form.on('field', function(field, value){fields.push([field, value]);}).on('file', function(field, file){var types = path.extname(file.name);if(typeof types[1] == 'undefined'){var type = file.type.split('/')[1];types += '.' + ( type == 'jpeg' ? 'jpg' : type );}var num = Math.ceil(Math.random() * (10000 - 1) + 10);var content = (ms + num + accountId + file.name).toString();var d = crypto.createHash('md5').update(content).digest('hex');var fileName = dir + d + types;var fileNames = dirs + d + types;fs.renameSync(file.path, fileName);file.path = fileNames;docs.push(file);}).on('end', function(){res.writeHead(200, {'content-type' : 'text/plain'});var imageSize = [];if(docs.length > 0){docs.forEach(function(fv, fk){imageSize.push(sizeOf('./public' + fv.path));});}var out = {Resopnse : {'result-code' : 0,timeStamp : new Date(),files : docs,imageSize : imageSize}};var sout = JSON.stringify(out);res.end(sout);});form.parse(req, function(err, fields, files){});}//base64流方式保存图片exports.baseUpload = function(req, res){mkdirsSync(dayurl);var num = Math.ceil(Math.random() * (10000 - 1) + 10);var filePath = '/uploads/ad/' + year + '/' + month + '/' + day + '/' + Date.parse(date) + num + '.jpg';var publicPath = config.realUrl + 'public' + filePath;var basefile = req.body.basefile;var base64 = basefile.replace(/^data:image\/\w+;base64,/, "");//去掉图片base64码前面部分data:image/png;base64var dataBuffer = new Buffer(base64, 'base64'); //把base64码转成buffer对象,console.log('dataBuffer是否是Buffer对象:' + Buffer.isBuffer(dataBuffer));fs.writeFile(publicPath, dataBuffer, function(err){//用fs写入文件if(err){return false;}else{return res.json({filePath : filePath});}})}//回调方式exports.baseUploadCallback = function(basefile, callback){mkdirsSync(dayurl);var num = Math.ceil(Math.random() * (10000 - 1) + 10);var filePath = '/uploads/ad/' + year + '/' + month + '/' + day + '/' + Date.parse(date) + num + '.jpg';var publicPath = config.realUrl + 'public' + filePath;var base64 = basefile.replace(/^data:image\/\w+;base64,/, "");//去掉图片base64码前面部分data:image/png;base64var dataBuffer = new Buffer(base64, 'base64'); //把base64码转成buffer对象,console.log('dataBuffer是否是Buffer对象:' + Buffer.isBuffer(dataBuffer));fs.writeFile(publicPath, dataBuffer, function(err){//用fs写入文件if(err){return false;}else{callback(filePath);}})}
调用dome
<% include ../common/header.html %><body> <link rel="stylesheet" type="text/css" href="/stylesheets/v1/account/quaUpload.css"> <link rel="stylesheet" href="/stylesheets/v1/account_common.css"> <form action = "/demo/fileGo" class = "text" enctype="multipart/form-data"> <input type = "file" id = "file" name="file" style="display: none"> <div id="upload" picType='<%= qua %>' style = ""> <% if(filePath){ %> <img class="pic picfile" src='<%= filePath %>' picName='<%= filePath %>'/> <% }else{ %> <img src="/images/v1/images/icon_add.png" class="add picfile" picName=""> <% } %> </div> <p class="up_p">扫描件图片或正面拍照,保证信息清晰可见,大小不超过5M。</p> <div class='btn_cont'> </div> </form> <a href="javascript:void(0)" value="确定" class="submit" style="display:block">提交</a> <% include ../common/footer.html %> <script src="/javascripts/v1/lib/jquery/jquery.js"></script><!-- <script src='/javascripts/v1/model/account/quaUpload.js'></script>--> </body></html><script> function getFileUrl(sourceId) { var url; if (navigator.userAgent.indexOf("MSIE") >= 1 && !(navigator.userAgent.indexOf("MSIE 10.0") > 0)) { // IE10取消了滤镜 url = document.selection.createRange().text; } else if (navigator.userAgent.indexOf("Firefox") > 0) { // Firefox url = window.URL.createObjectURL(document.getElementById(sourceId).files.item(0)); } else if (navigator.userAgent.indexOf("Chrome") > 0) { // Chrome url = window.URL.createObjectURL(document.getElementById(sourceId).files.item(0)); } else if (navigator.userAgent.indexOf("MSIE 10.0") > 0) { url = window.URL.createObjectURL(document.getElementById(sourceId).files.item(0)); } else { url = window.URL.createObjectURL(document.getElementById(sourceId).files.item(0)); } return url; } $('#upload').click(function(){ $('#file').click(); }); $("#file").change(function() { var url = getFileUrl('file'); getBase64(url).then(function(base64){ $.ajax({ type: 'POST', url: '/upload/baseUpload', data: { basefile : base64 }, success: function (res) { if(res.filePath){ $('.picfile').removeClass('add').addClass('pic').addClass('up'); $(".picfile").attr("src", base64); $('.picfile').attr('picName',res.filePath); }else{ alert('上传失败请重新选择一次图片'); } } }) },function(err){ console.log(err); }); }); $('.submit').click(function(){ if($('.picfile').hasClass('up')){ $.ajax({ type: 'POST', url: '/account/fileUp', data: { qua : $('#upload').attr('picType'), fileName : $('.picfile').attr('picName') }, success: function (res) { if (res.code == 0) { window.location.href = '/account/qualifications'; } else { alert(res.reason); } } }) }else{ if($('.picfile').hasClass('pic')){ window.location.href = '/account/qualifications'; }else{ alert('请选择图片'); } } }) //转换base64 function getBase64(img){//传入图片路径,返回base64 function getBase64Image(img,width,height) {//width、height调用时传入具体像素值,控制大小 ,不传则默认图像大小 var canvas = document.createElement("canvas"); canvas.width = width ? width : img.width; canvas.height = height ? height : img.height; var ctx = canvas.getContext("2d"); ctx.drawImage(img, 0, 0, canvas.width, canvas.height); var dataURL = canvas.toDataURL(); return dataURL; } var image = new Image(); image.src = img; var deferred=$.Deferred(); if(img){ image.onload =function (){ deferred.resolve(getBase64Image(image));//将base64传给done上传处理 } return deferred.promise();//问题要让onload完成后再return sessionStorage['imgTest'] } }</script>
阅读全文
0 0
- node中上传文件【base64文件流+插件调用】两种方式
- jquery文件上传例子(两种方式)
- springMVC上传文件的两种方式
- Java文件上传的两种方式
- Sping MVC上传文件两种方式
- springMVC 的两种文件上传方式
- Spring MVC 上传文件两种方式
- form上传文件的两种方式
- 【文件上传 后端】文件上传 后端 Part2 —— base64文件流方式
- node.js中上传文件
- springmvc 上传文件两种方式比较以及上传问题解决
- node文件上传插件formidable的使用
- 在Spring mvc中配置upload,实现文件上传功能的两种方式
- 使用WebClient上传文件的两种方式
- WEB-Android两种方式实现文件上传
- 常用的两种ajax上传文件的方式
- jersey 文件上传-使用两种不同的方式
- SpringMVC两种方式实现多文件上传
- ME909S-821 4G-LTE模块在Linux系统下拨号上网测试
- Experimental Educational Round: VolBIT Formulas Blitz K. Indivisibility —— 容斥原理
- 解决 apt-get install 依赖问题
- maven多模块使用,父模块(modules使用,package替pom),子模块(parent使用)
- 调研tcp定时器
- node中上传文件【base64文件流+插件调用】两种方式
- 数据结构(笔记)
- [PAT-甲级]1009.Product of Polynomials
- ML实战-Adaline with stochastic gradient descent
- 第一章 编程技巧
- oracle数据库中的数据信息
- 单列设计模式
- IPC机制--开发艺术探索(一)
- 证明推导过程记录