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

七牛云相关步骤思路:

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

  然后 找到应用于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. Control4系统对接arduino

    https://www.chowmainsoft.com/arduino int digitalState[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; v ...

  2. GIF 生成软件

    Screen to Gif

  3. go struct{}的几种特殊用法

    参考:https://blog.csdn.net/kturing/article/details/80557280 1.声明为声明为map[string]struct{} 由于struct{}是空,不 ...

  4. pyspider环境部署1--python3安装

    爬虫是一个既好玩又好用的东西,接触它有1年多了,了解一些,算不上精通.爬过新闻.微信公众号,主要用pyspider,scrapy也了解过,python2和3都尝试过.公司业务规模不大,基于 pytho ...

  5. Storm知识点

    1. 离线计算是什么? 离线计算:批量获取数据.批量传输数据.周期性批量计算数据.数据展示 代表技术:Sqoop批量导入数据.HDFS批量存储数据.MapReduce批量计算数据.Hive批量计算数据 ...

  6. 深入源码理解ThreadLocal和ThreadLocalMap

    一.ThreadLoacl的理解: 官方的讲: ThreadLocal是一个本地线程副本变量工具类,主要用于将私有线程和该线程存放的副本对象做一个映射,各个线程之间的变量互不干扰 通俗的讲: Thre ...

  7. Spark性能优化指南——高级篇(转载)

    前言 继基础篇讲解了每个Spark开发人员都必须熟知的开发调优与资源调优之后,本文作为<Spark性能优化指南>的高级篇,将深入分析数据倾斜调优与shuffle调优,以解决更加棘手的性能问 ...

  8. DOM操作 JS事件 节点增删改查

    --------------------------习惯是社会的巨大的飞轮和最可贵的维护者.——威·詹姆斯 day 49 [value属性操作] <!DOCTYPE html><ht ...

  9. mockjs使用

    /** * 使用mockjs来mock数据, 提供mock数据API接口 */ import Mock from 'mockjs' import data from './data.json' //注 ...

  10. 剑指Offer-- 翻转链表 (python版)

    输入一个链表,反转链表后,输出链表的所有元素. # -*- coding:utf-8 -*- # class ListNode: # def __init__(self, x): # self.val ...