上篇文章队长讲述了如何把前端上传的文件保存到本地项目目录
本篇 讲述一下把前端上传的文件保存到 第三方存储(七牛云)

七牛云相关步骤思路:

  首先 进去七牛云官网,注册并实名认证来获取一个七牛云账号和存储服务器

  然后 找到应用于python的存储api

  最后 在项目中添加此api以便存储文件时调用

flask项目逻辑思路:

  1、根据任务id获取要附加文件的任务

  2、获取上传的文件

  3、验证文件是否存在

  4、调用七牛云存储函数存储文件(存储对象要求二进制)

  5、把返回的文件名保存到数据库以便查询下载

附上七牛云接口函数 image_storage.py:

# -*- coding: utf-8 -*-

from qiniu import Auth, put_file, etag, urlsafe_base64_encode, put_data
import qiniu.config """
工具类与SDK的区别 工具类: 没有商业利益, 拿来直接使用的. SDK: 开发组件包,保护代码/文档/示例....
1. 官网, 是有商业价值利益的. 通常由某个公司来维护开发该产品
2. 都需要注册/登录/创建应用(有控制台)/
3. 获取AK、SK等才能使用. 都需要鉴权后才能使用
4. 详细的接口文档/Demo/技术支持等
""" # 需要填写你的 Access Key 和 Secret Key
access_key = '6HpJXhnT1MS70c7GjT--UrvRn6sMsxwDkIQ1fYQq'
secret_key = 'rn0V8J7trKklJwTRA8arYoFFCOe6OftoCt_w-s-4' # 我们使用此工具类的目的, 是调用存储图像方法后, 能够获得图像名-->给用户的用户头像路径赋值
def storage(file_data):
"""上传图片到七牛, file_data是文件的二进制数据"""
# 构建鉴权对象
q = Auth(access_key, secret_key) # 要上传的空间
bucket_name = 'itheimaihome' # 我们不需要这个Key. 七牛会自动生成
# 上传到七牛后保存的文件名
# key = 'my-python-logo.png'; # 生成上传 Token,可以指定过期时间等
token = q.upload_token(bucket_name, None, 3600) # 我们这个是通过form表单提交的, 不需要用到put_file方法
# 要上传文件的本地路径
# localfile = './sync/bbb.jpg'
# ret, info = put_file(token, None, file_data) ret, info = put_data(token, None, file_data) print 'info: %s' % info
print 'ret: %s' % ret if info.status_code == 200:
# 表示上传成功, 返回文件名
# 我们上传成功之后, 需要在别的页面显示图像, 因此需要返回图像名
return ret.get("key")
else:
# 表示上传失败
raise Exception("上传失败")
# http://ozcxm6oo6.bkt.clouddn.com/FnTUusE1lgSJoCccE2PtYIt0f7i3

后端flask逻辑代码块

from ihome.libs.image_storage import storage
@login_require
def set_user_avatar():
# 图片是以表单提交的  
# 一. 获取参数
# 获取用户id
user_id = g.user_id # 获取用户头像
image_file = request.files.get('avatar') # 二. 校验参数
if image_file is None:
return jsonify(errno=RET.DATAERR, errmsg='图片上传错误') # 三. 逻辑处理
# 1. 调用工具类上传头像
image_data = image_file.read()
try:
file_name = storage(image_data)
except Exception as e:
logging.error(e)
return jsonify(errno=RET.THIRDERR, errmsg='七牛云存储错误') # 2. 保存文件名到数据库中
try:
User.query.filter_by(id=user_id).update({'avatar_url': file_name})
db.session.commit()
except Exception as e:
db.session.rollback()
logging.error(e)
return jsonify(errno=RET.THIRDERR, errmsg='mysql存储头像错误') # 四. 返回数据
QINIU_URL_DOMAIN = "http://ozcxm6oo6.bkt.clouddn.com/" # 七牛的访问域名 
avatar_url = constants.QINIU_URL_DOMAIN + file_name
return jsonify(errno=RET.OK, errmsg='请求成功',data={'avatar_url': avatar_url})

  html:

 <img id="user-avatar" src="">
<div class="menu-text">
<form id="form-avatar" action="/api/profile/avatar" method="post" enctype="multipart/form-data">
选择头像:<input type="file" accept="image/*" name="avatar">
     <input type="submit" class="btn btn-success" value="上传">
</form>
</div>

  js:

 $(document).ready(function () {
// 页面加载好
$("#form-avatar").submit(function (event) {
// 阻止表单的默认行为
event.preventDefault();
// jquery.form.min.js
$(this).ajaxSubmit({
url: "/api/v1_0/users/avatar",
type: "post",
dataType: "json",
headers: {
"X-CSRFToken": getCookie("csrf_token")
},
success: function (resp) {
if (resp.errno == 0) {
// 上传头像成功, 设置页面中头像展示的url
$("#user-avatar").attr("src", resp.data.avatar_url);
} else if (resp.errno == 4101 ){
// 表示用户未登录, 跳转到登录页面
location.href = "/login.html";
} else {
alert(resp.errmsg);
}
}
});
});
})
 

flask 保存文件到 七牛云的更多相关文章

  1. 利用ThinkPHP自带的七牛云驱动上传文件到七牛云以及删除七牛云文件方法

    一.准备工作 1.注册七牛云账号 2.选择对象储存->创建空间->设置为公开 3.在config配置文件中添加以下代码 'UPLOAD_FILE_QINIU' => array ( ...

  2. RN 上传文件到以及上传文件到七牛云(初步)

    本文将介绍: 如何使用原生 Javascript 上传文件 如何使用七牛云 SDK 上传文件到七牛云 在 App 中文件上传是一个非常重要的需求,但是翻遍 React Naitve 的官方文档没有发现 ...

  3. SpringSpringBoot上传文件到七牛云

    准备工作 maven pom.xml添加七牛云的sdk依赖 <dependency> <groupId>com.qiniu</groupId> <artifa ...

  4. 使用Qiniu-JavaScript-SDK上传文件至七牛云存储

    一.Qiniu-JavaScript-SDK介绍 基于 JS-SDK 可以方便的从浏览器端上传文件至七牛云存储,并对上传成功后的图片进行丰富的数据处理操作. JS-SDK 兼容支持 H5 File A ...

  5. 用ueditor上传图片、文件等到七牛云存储

    ueditor上传文件,是用数据流的形式上传的. 而七牛云存储官方文档中,只提供了文件路径上传的方式. 但是,仅仅是在官方文档中写了这一种方式. 事实上,利用VS的对象管理器,打开Qiniu的dll, ...

  6. laravel上传文件到七牛云存储

    背景 最近在用PHP和laravel框架做一个图片网站,需要将图片存贮到云端,搜索下了对比了下功能,发现七牛云存储不错(主要小流量免费),便选择使用七牛作为图片存储空间. 要实现的功能很简单,选择本地 ...

  7. java(SSM)上传文件到七牛云(对象存储)

    项目中会用到大量的图片和小视频,为了分担服务器压力,将文件都放在七牛云.这里的思路很简单, 就是移动端.pc端把文件上传到服务器,服务器做一个临时缓存,保存必要的信息到数据库后, 将文件上传到七牛云, ...

  8. Laravel-admin 七牛云上传文件到七牛云出现卡顿失败情况

    由于所做项目需要管理后台众多,所以选择了Laravel-admin后台框架进行开发.节省了权限控制以及页面处理等问题的时间 Laravel-admin文档地址 http://laravel-admin ...

  9. Nuxt 自动化部署及打包后文件自动上传七牛云

    1.安装七牛云 2.在项目根目录新建 upload.js 3.上传凭证 4.上传配置,详情参考七牛云文档 5.在 package.js中修改项目build完成执行upload文件命令 7. nuxt. ...

随机推荐

  1. 四、Oracle 序列、常用函数、多表连接

    一.序列定义:是oracle数据库专门用来产生连续且自动增长的数字的对象创建语法:create sequence 序列名(sq_表名) nocache(无缓存) create sequence sq_ ...

  2. go标准库的学习-os

    参考https://studygolang.com/pkgdoc 导入方式: import "os" os包提供了操作系统函数的不依赖平台的接口 一开始简单举个例子: packag ...

  3. 带返回结果的批量任务执行 CompletionService

    转自 :http://blog.csdn.net/lmj623565791/article/details/27250059 一般情况下,我们使用Runnable作为基本的任务表示形式,但是Runna ...

  4. [转]关于oracle sql语句查询时表名和字段名要加双引号的问题

    oracle初学者一般会遇到这个问题.   用navicat可视化创建了表,可是就是不能查到!   后来发现②语句可以查询到 ①select * from user; 但是,我们如果给user加上双引 ...

  5. 蓝牙BLE设备断线回连分析

    在 文章中分析了Hogp的连接的流程 ,这里分析一下回连的流程. 在使用ble设备的过程中,我们发现当设备和主机配对之后,如果没有解除配对,那么即便设备和主机断开,那么也是可以重新连接而不需要重新走配 ...

  6. JDK命令行(jps、jstat、jinfo、jmap、jhat、jstack、jstatd、hprof)与JConsole

    很多资料在介绍JDK命令行工具时并不是在Java8环境下,因此还在使用过时的永久区系列的参数,给一些读者造成困难. Java8使用Metaspace(元空间)代替永久区,对于64位平台,为了压缩JVM ...

  7. 单点登录SSO:概述与示例

    目录 概述 演示一:零改造实施单点登录 演示二: 单点注销 演示三:集成AD认证 演示四:客户端单点登录 演示五:移动端单点登录 单点登录SSO概述 本系列将由浅入深的,带大家掌握最新单点登录SSO方 ...

  8. 腾讯AlloyTeam正式发布omi-cli脚手架 - 创建网站无需任何配置

    omi-cli omi-cli omi-cli命令 omi框架 用户指南 文件目录 npm 脚本 npm start npm run dist 代码分割 兼容 IE8 插入 CSS 插入组件局部 CS ...

  9. ASP.NET Core 和 ASP.NET Framework 共享 Identity 身份验证

    .NET Core 已经热了好一阵子,1.1版本发布后其可用性也越来越高,开源.组件化.跨平台.性能优秀.社区活跃等等标签再加上"微软爸爸"主推和大力支持,尽管现阶段对比.net ...

  10. ASP.NET MVC5+EF6+EasyUI 后台管理系统(92)-打印EasyUI 的datagrid表格

    前言 应用系统有时候需要打印Datagrid的表格内容,我们本节就来学习打印datagrid内容 打印主要使用:web打印(我们之前有讲过web打印插件jqprint) + 将datagrid重新编制 ...