七牛云存储-用前端button上传到七牛
引入七牛的步足
-
安装python的sdk
pip install qiniu -
后端代码
@app.route("/uptoken/") def uptoken(): access_key = \'你的AccessKey\' secret_key = \'你的SecretKey\' # 创建qiniu对象 q = qiniu.Auth(access_key, secret_key) # 储存空间的名称 bucket = \'zlbbs\' # 获取token 参数存储空间的名字 token = q.upload_token(bucket) return jsonify({\'uptoken\': token}) -
在前端添加js的sdk: 七牛为JavaScript提供了一个专门用来上传文件的接口.把一下文件音带html代码中:
<script src="https://cdn.staticfile.org/Plupload/2.1.1/moxie.js"></script> <script src="https://cdn.staticfile.org/Plupload/2.1.1/plupload.dev.js"></script> <script src="https://cdn.staticfile.org/qiniu-js-sdk/1.0.14-beta/qiniu.js"></script> -
在前端添加zlqiniu.js文件: 这个文件是封装了七牛的初始化和配置相关的. 使用这个文件可以写更少的代码来使用七牛
<script src="{{ url_for(\'static\',filename=\'zlqiniu.js\') }}"></script> -
初始化七牛: 使用一下代码初始化七牛, 配置一些参数信息:
window.onload = function () { zlqiniu.setUp({ \'browse_btn\': \'upload-btn\', \'uptoken_url\': \'/uptoken/\', \'success\': function (up,file,info) { var url = file.name; console.log(url); } }); }解释以上代码:
-
browse_btn: 这个是用来绑定按钮的id的. 以后点击这个按钮就可以上传文件.
-
uptoken_url: 这个是后台写好的获取uptoken的接口
-
success: 这个是文件上传成功后执行的回调.\
-
实践
-
后端代码
from flask import Flask, jsonify, render_template import qiniu app = Flask(__name__) @app.route("/") def index(): return render_template("index.html") @app.route("/uptoken/") def uptoken(): access_key = \'******************************************\' secret_key = \'******************************************\' # 创建qiniu对象 q = qiniu.Auth(access_key, secret_key) # 储存空间的名称 bucket = \'zlbbs\' # 参数存储空间的名字 token = q.upload_token(bucket) return jsonify({\'uptoken\': token}) if __name__ == "__main__": app.run(debug=True) -
zlqiniu.js
\'use strict\'; var zlqiniu = { \'setUp\': function(args) { var domain = args[\'domain\']; var params = { browse_button:args[\'browse_btn\'], runtimes: \'html5,flash,html4\', //上传模式,依次退化 max_file_size: \'500mb\', //文件最大允许的尺寸 dragdrop: false, //是否开启拖拽上传 chunk_size: \'4mb\', //分块上传时,每片的大小 uptoken_url: args[\'uptoken_url\'], //ajax请求token的url domain: domain, //图片下载时候的域名 get_new_uptoken: false, //是否每次上传文件都要从业务服务器获取token auto_start: true, //如果设置了true,只要选择了图片,就会自动上传 unique_names: true, multi_selection: false, filters: { mime_types :[ {title:\'Image files\',extensions: \'jpg,gif,png\'}, {title:\'Video files\',extensions: \'flv,mpg,mpeg,avi,wmv,mov,asf,rm,rmvb,mkv,m4v,mp4\'} ] }, log_level: 5, //log级别 init: { \'FileUploaded\': function(up,file,info) { if(args[\'success\']){ var success = args[\'success\']; file.name = domain + file.target_name; success(up,file,info); } }, \'Error\': function(up,err,errTip) { if(args[\'error\']){ var error = args[\'error\']; error(up,err,errTip); } }, \'UploadProgress\': function (up,file) { if(args[\'progress\']){ args[\'progress\'](up,file); } }, \'FilesAdded\': function (up,files) { if(args[\'fileadded\']){ args[\'fileadded\'](up,files); } }, \'UploadComplete\': function () { if(args[\'complete\']){ args[\'complete\'](); } } } }; // 把args中的参数放到params中去 for(var key in args){ params[key] = args[key]; } var uploader = Qiniu.uploader(params); return uploader; } }; -
前端代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.staticfile.org/Plupload/2.1.1/moxie.js"></script> <script src="https://cdn.staticfile.org/Plupload/2.1.1/plupload.dev.js"></script> <script src="https://cdn.staticfile.org/qiniu-js-sdk/1.0.14-beta/qiniu.js"></script> <script src="{{ url_for(\'static\',filename=\'zlqiniu.js\') }}"></script> <script> window.onload = function () { zlqiniu.setUp({ // 这里用你绑定的域名, 但是我这里用的测试域名 \'domain\': \'http://pw7ro1ig9.bkt.clouddn.com/\', // 按钮id \'browse_btn\': \'upload-btn\', // 访问后端的路径 \'uptoken_url\': \'/uptoken/\', // 成功后的回调 \'success\': function (up,file,info) { // file.name是图片的链接 var image_url = file.name; var imageInput = document.getElementById("image-input"); // 把图片的url赋值给input的value imageInput.value = image_url; var img = document.getElementById("img"); // 把图片的链接赋值给img的src img.setAttribute("src", image_url); } }); } </script> </head> <body> <button id="upload-btn">上传文件</button> <input type="text" id="image-input"> <img src="" alt="" id="img"> </body> </html>