开发模式和生产模式下上传图片到服务器和七牛

导入需要的框架,需要在终端  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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值