导入需要的框架,需要在终端 npm install qiniu
let fs = require('fs'),
qiniu = require('qiniu'),
path = require('path'),
核心代码
/**
* Banner图片上传
* @param options
* @returns {val}
*/
updateImgUrlInfo: function updateImgUrlInfo(options){
//先将图片上传到本地
var imageName = 文件名 + nowDateToString() + '_' + Math.round(Math.random()*10000) + '.png';(自定义文件名)
//过滤data:URL
var base64Data = options.imgPreviewUrl.replace(/^data:image\/\w+;base64,/, "");
var dataBuffer = new Buffer(base64Data, 'base64');
var _path, _subPath;
if (process.env.NODE_ENV && process.env.NODE_ENV === 'production') {
logger.debug('production’);
//产品模式的存储路径
_path = 主存储路径;
_subPath = 子文件夹路径(两层目录);
} else { // 开发模式<pre name="code" class="plain"> _path = 主存储路径;
_subPath = 子文件夹路径(两层目录);
} return new Promise(function (resolve, reject) { fs.access(_path + 一层目录, function(err) { if (err) { // images文件夹不存在,创建 fs.mkdir(_path + '/images/',function(err){ if (err) { resolve({err: err}); } console.log("一层目录创建成功。"); fs.access(_path + _subPath, function(err) { if (err) { // 文件夹不存在,创建 fs.mkdir(_path + _subPath,function(err){ if (err) { resolve({err: err}); } console.log("二层目录创建成功。"); resolve(
fsWriteFileAndUpload(options, _path, _subPath, imageName, dataBuffer)); }) } else { // 文件夹存在 resolve(
fsWriteFileAndUpload(options, _path, _subPath, imageName, dataBuffer)); } }); }) } else { // 文件夹存在 fs.access(_path + _subPath, function(err) { if (err) { // 文件夹不存在,创建 fs.mkdir(_path + _subPath,function(err){ if (err) { resolve({err: err}); } console.log("二层目录创建成功。"); resolve(
fsWriteFileAndUpload(options, _path, _subPath, imageName, dataBuffer)); }) } else { // 文件夹存在 resolve(
fsWriteFileAndUpload(options, _path, _subPath, imageName, dataBuffer)); } }); } }); });}
</pre><pre name="code" class="plain"><p class="p1"><span class="s1"><strong>function </strong></span><span class="s2"><em><u>fsWriteFileAndUpload</u></em>(options, _path, _subPath, imageName, dataBuffer){</span></p><p class="p1"><span class="s2"> </span><span class="s1"><strong>return new </strong></span><span class="s2">Promise(</span><span class="s1"><strong>function</strong></span><span class="s2">(resolve, reject){</span></p><p class="p1"><span class="s2"> </span><span class="s3"><strong><em>fs</em></strong></span><span class="s2">.</span><span class="s4">writeFile</span><span class="s2">(_path + _subPath + imageName, dataBuffer, </span><span class="s1"><strong>function</strong></span><span class="s2">(err) {</span></p><p class="p1"><span class="s2"> </span><span class="s1"><strong>if</strong></span><span class="s2">(err){</span></p><p class="p1"><span class="s2"> </span><span class="s3"><strong><em>logger</em></strong></span><span class="s2">.</span><span class="s3"><strong>debug</strong></span><span class="s2">(</span><span class="s5"><strong>'err:'</strong></span><span class="s2">+err);</span></p><p class="p1"><span class="s2"> reject(err)</span></p><p class="p1"><span class="s2"> }</span><span class="s1"><strong>else</strong></span><span class="s2">{</span></p><p class="p1"><span class="s2"> </span><span class="s1"><strong>let </strong></span><span class="s6">filePath </span><span class="s2">= _path + _subPath;</span></p><p class="p1"><span class="s2"> <em><u>qiniuUploadFile</u></em>(</span><span class="s6">filePath</span><span class="s2">, imageName).</span><span class="s4">then</span><span class="s2">(</span><span class="s1"><strong>function</strong></span><span class="s2">(){</span></p><p class="p2"><span class="s7"> </span><span class="s2"><em>logger.debug('上传成功!');</em></span></p><p class="p2"><span class="s2"><em> resolve({</em></span></p><p class="p2"><span class="s2"><em> <span style="white-space:pre"> </span>"imgUrl":constants.QINIUURL+imageName</em></span></p><p class="p2"><span class="s2"><em> });</em></span></p><p class="p1"><span class="s2"> }).</span><span class="s4">catch</span><span class="s2">(</span><span class="s1"><strong>function</strong></span><span class="s2">(err){</span></p><p class="p1"><span class="s2"> resolve(err)</span></p><p class="p1"><span class="s2"> })</span></p><p class="p1"><span class="s2"> }</span></p><p class="p1"><span class="s2"> });</span></p><p class="p1"><span class="s2"> })</span></p><p class="p1"><span class="s2">}</span></p><p class="p1"><span class="s2">
</span></p><p class="p4">//上传七牛代码<span class="s2"></span></p><p class="p4"></p><p class="p1" style="font-family: monospace; white-space: pre;"><span class="s1"><strong>function </strong></span><span class="s2"><em><u>qiniuUploadFile</u></em>(filePath, imageName) {</span></p><p class="p1" style="font-family: monospace; white-space: pre;"><span class="s2"> </span><span class="s1"><strong>let </strong></span><span class="s3">path </span><span class="s2">= filePath;</span></p><p class="p1" style="font-family: monospace; white-space: pre;"><span class="s2"> </span><span class="s1"><strong>return new </strong></span><span class="s2">Promise(</span><span class="s1"><strong>function</strong></span><span class="s2">(resolve, reject) {</span></p><p class="p2" style="font-family: monospace; white-space: pre;"><span class="s4"> </span><span class="s2"><em>//需要填写你的 Access Key 和 Secret Key</em></span></p><p class="p3" style="font-family: monospace; white-space: pre;"><span class="s5"><em> </em></span><span class="s6"><strong><em>qiniu</em></strong></span><span class="s4">.</span><span class="s6"><strong>conf</strong></span><span class="s4">.</span><span class="s6"><strong>ACCESS_KEY </strong></span><span class="s4">= '***********'</span><span class="s4">;</span></p><p class="p3" style="font-family: monospace; white-space: pre;"><span class="s4"> </span><span class="s6"><strong><em>qiniu</em></strong></span><span class="s4">.</span><span class="s6"><strong>conf</strong></span><span class="s4">.</span><span class="s6"><strong>SECRET_KEY </strong></span><span class="s4">= <strong>'***********'</strong></span><span class="s4">;</span></p><p class="p2" style="font-family: monospace; white-space: pre;"><span class="s4"> </span><span class="s2"><em>//要上传的空间</em></span></p><p class="p3" style="font-family: monospace; white-space: pre;"><span class="s5"><em> </em></span><span class="s1"><strong>var </strong></span><span class="s3">bucket </span><span class="s4">= </span><span class="s2"><strong>'xxxxxxx'</strong></span><span class="s4">;</span></p><p class="p2" style="font-family: monospace; white-space: pre;"><span class="s4"> </span><span class="s2"><em>//上传到七牛后保存的文件名</em></span></p><p class="p1" style="font-family: monospace; white-space: pre;"><span class="s5"><em> </em></span><span class="s1"><strong>var </strong></span><span class="s3">key </span><span class="s2">= imageName;</span></p><p class="p4" style="font-family: monospace; white-space: pre;"><span class="s2"></span>
</p><p class="p2" style="font-family: monospace; white-space: pre;"><span class="s4"> </span><span class="s2"><em>//构建上传策略函数</em></span></p><p class="p1" style="font-family: monospace; white-space: pre;"><span class="s5"><em> </em></span><span class="s1"><strong>function </strong></span><span class="s2"><em>uptoken</em>(bucket, key) {</span></p><p class="p1" style="font-family: monospace; white-space: pre;"><span class="s2"> </span><span class="s1"><strong>var </strong></span><span class="s3">putPolicy </span><span class="s2">= </span><span class="s1"><strong>new </strong></span><span class="s6"><strong><em>qiniu</em></strong></span><span class="s2">.</span><span class="s6"><strong>rs</strong></span><span class="s2">.PutPolicy(bucket+</span><span class="s7"><strong>":"</strong></span><span class="s2">+key);</span></p><p class="p1" style="font-family: monospace; white-space: pre;"><span class="s2"> </span><span class="s1"><strong>return </strong></span><span class="s3">putPolicy</span><span class="s2">.</span><span class="s6"><strong>token</strong></span><span class="s2">();</span></p><p class="p1" style="font-family: monospace; white-space: pre;"><span class="s2"> }</span></p><p class="p4" style="font-family: monospace; white-space: pre;"><span class="s2"></span>
</p><p class="p2" style="font-family: monospace; white-space: pre;"><span class="s4"> </span><span class="s2"><em>//生成上传 Token</em></span></p><p class="p5" style="font-family: monospace; white-space: pre;"><span class="s5"><em> </em></span><span class="s1"><strong>var </strong></span><span class="s2">token </span><span class="s4">= <em>uptoken</em>(</span><span class="s2">bucket</span><span class="s4">, </span><span class="s2">key</span><span class="s4">);</span></p><p class="p4" style="font-family: monospace; white-space: pre;"><span class="s2"></span>
</p><p class="p2" style="font-family: monospace; white-space: pre;"><span class="s4"> </span><span class="s2"><em>//要上传文件的本地路径</em></span></p><p class="p1" style="font-family: monospace; white-space: pre;"><span class="s5"><em> </em></span><span class="s1"><strong>var </strong></span><span class="s3">filePath </span><span class="s2">= </span><span class="s3">path </span><span class="s2">+ imageName;</span></p><p class="p4" style="font-family: monospace; white-space: pre;"><span class="s2"></span>
</p><p class="p2" style="font-family: monospace; white-space: pre;"><span class="s4"> </span><span class="s2"><em>//构造上传函数</em></span></p><p class="p1" style="font-family: monospace; white-space: pre;"><span class="s5"><em> </em></span><span class="s1"><strong>function </strong></span><span class="s2"><em>uploadFile</em>(uptoken, key, localFile) {</span></p><p class="p1" style="font-family: monospace; white-space: pre;"><span class="s2"> </span><span class="s1"><strong>var </strong></span><span class="s3">extra </span><span class="s2">= </span><span class="s1"><strong>new </strong></span><span class="s6"><strong><em>qiniu</em></strong></span><span class="s2">.</span><span class="s6"><strong>io</strong></span><span class="s2">.PutExtra();</span></p><p class="p1" style="font-family: monospace; white-space: pre;"><span class="s2"> </span><span class="s6"><strong><em>qiniu</em></strong></span><span class="s2">.</span><span class="s6"><strong>io</strong></span><span class="s2">.putFile(uptoken, key, localFile, </span><span class="s3">extra</span><span class="s2">, </span><span class="s1"><strong>function</strong></span><span class="s2">(err, ret) {</span></p><p class="p1" style="font-family: monospace; white-space: pre;"><span class="s2"> </span><span class="s1"><strong>if</strong></span><span class="s2">(!err) {</span></p><p class="p1" style="font-family: monospace; white-space: pre;"><span class="s2"> </span><span class="s5"><em>// 上传成功, 处理返回值</em></span></p><p class="p1" style="font-family: monospace; white-space: pre;"><span class="s5"><em> </em></span><span class="s6"><strong>console</strong></span><span class="s2">.</span><span class="s8">log</span><span class="s2">(ret.</span><span class="s6"><strong>hash</strong></span><span class="s2">, ret.</span><span class="s8">key</span><span class="s2">, ret.persistentId);</span></p><p class="p1" style="font-family: monospace; white-space: pre;"><span class="s2"> resolve(</span><span class="s7"><strong>"ok"</strong></span><span class="s2">)</span></p><p class="p1" style="font-family: monospace; white-space: pre;"><span class="s2"> } </span><span class="s1"><strong>else </strong></span><span class="s2">{</span></p><p class="p1" style="font-family: monospace; white-space: pre;"><span class="s2"> </span><span class="s5"><em>// 上传失败, 处理返回代码</em></span></p><p class="p2" style="font-family: monospace; white-space: pre;"><span class="s2"><em> </em></span><span class="s6"><strong>console</strong></span><span class="s4">.</span><span class="s8">log</span><span class="s4">(err);</span></p><p class="p1" style="font-family: monospace; white-space: pre;"><span class="s2"> reject(err)</span></p><p class="p1" style="font-family: monospace; white-space: pre;"><span class="s2"> }</span></p><p class="p1" style="font-family: monospace; white-space: pre;"><span class="s2"> });</span></p><p class="p1" style="font-family: monospace; white-space: pre;"><span class="s2"> }</span></p><p class="p2" style="font-family: monospace; white-space: pre;"><span class="s4"> </span><span class="s2"><em>//调用uploadFile上传</em></span></p><p class="p1" style="font-family: monospace; white-space: pre;"><span class="s5"><em> </em></span><span class="s2"><em>uploadFile</em>(</span><span class="s3">token</span><span class="s2">, </span><span class="s3">key</span><span class="s2">, </span><span class="s3">filePath</span><span class="s2">);</span></p><p class="p1" style="font-family: monospace; white-space: pre;"><span class="s2"> });</span></p><p class="p1" style="font-family: monospace; white-space: pre;"><span class="s2">}</span></p><p class="p2"><span class="s2"><em>/**</em></span></p><p class="p2"><span class="s2"><em> * 返回当前日月年时分秒 例如20162122222</em></span></p><p class="p2"><span class="s2"><em> */</em></span></p><p class="p1"><span class="s1"><strong>function </strong></span><span class="s2"><em>nowDateToString</em>() {</span></p><p class="p1"><span class="s2"> </span><span class="s1"><strong>var </strong></span><span class="s6">date </span><span class="s2">= </span><span class="s1"><strong>new </strong></span><span class="s2">Date();</span></p><p class="p5"><span class="s7"> </span><span class="s1"><strong>var </strong></span><span class="s6">year </span><span class="s7">= </span><span class="s6">date</span><span class="s7">.</span><span class="s2">getFullYear</span><span class="s7">().</span><span class="s2">toString</span><span class="s7">();</span></p><p class="p1"><span class="s2"> </span><span class="s1"><strong>var </strong></span><span class="s6">month </span><span class="s2">= (</span><span class="s6">date</span><span class="s2">.</span><span class="s4">getMonth</span><span class="s2">() + </span><span class="s8">1</span><span class="s2">).</span><span class="s4">toString</span><span class="s2">();</span></p><p class="p5"><span class="s7"> </span><span class="s1"><strong>var </strong></span><span class="s6">day </span><span class="s7">= </span><span class="s6">date</span><span class="s7">.</span><span class="s2">getDate</span><span class="s7">().</span><span class="s2">toString</span><span class="s7">();</span></p><p class="p5"><span class="s7"> </span><span class="s1"><strong>var </strong></span><span class="s6">hour </span><span class="s7">= </span><span class="s6">date</span><span class="s7">.</span><span class="s2">getHours</span><span class="s7">().</span><span class="s2">toString</span><span class="s7">(); </span><span class="s9"><em>//小时</em></span></p><p class="p5"><span class="s9"><em> </em></span><span class="s1"><strong>var </strong></span><span class="s6">minute </span><span class="s7">= </span><span class="s6">date</span><span class="s7">.</span><span class="s2">getMinutes</span><span class="s7">().</span><span class="s2">toString</span><span class="s7">(); </span><span class="s9"><em>//分</em></span></p><p class="p5"><span class="s9"><em> </em></span><span class="s1"><strong>var </strong></span><span class="s6">second </span><span class="s7">= </span><span class="s6">date</span><span class="s7">.</span><span class="s2">getSeconds</span><span class="s7">().</span><span class="s2">toString</span><span class="s7">(); </span><span class="s9"><em>//秒</em></span></p><p class="p6"><span class="s2"><em></em></span>
</p><p class="p3"><span class="s9"><em> </em></span><span class="s1"><strong>var </strong></span><span class="s2">fullDate </span><span class="s7">= </span><span class="s2">year </span><span class="s7">+ </span><span class="s2">month </span><span class="s7">+ </span><span class="s2">day </span><span class="s7">+ </span><span class="s2">hour </span><span class="s7">+ </span><span class="s2">minute </span><span class="s7">+ </span><span class="s2">second</span><span class="s7">;</span></p><p class="p4"><span class="s2"></span>
</p><p class="p3"><span class="s7"> </span><span class="s1"><strong>return </strong></span><span class="s2">fullDate</span><span class="s7">;</span></p><p class="p1"><span class="s2">}</span></p>