python教程七牛云_python文件上传与七牛云存储

这篇博客介绍了如何使用Python进行文件上传,包括HTML和AJAX方式提交文件,以及如何处理文件上传逻辑。接着,文章详细展示了如何配置七牛云存储,并引用官方SDK实现Python代码上传文件到七牛云,最后将上传的文件信息保存到数据库。
摘要由CSDN通过智能技术生成

HTML方式

通过form表单提交文件,设置enctype="multipart/form-data"

ajax方式

通过构建FormData,append添加参数,以键值对形式

html文件

upload

js文件

var formData = new FormData();

$(document).ready(function(){

$("#upload").click(function(){

formData.append('file', $('#file')[0].files[0]);

$.ajax({

url: '/upload/',

type: 'POST',

cache: false,

data: formData,

processData: false,

contentType: false

}).done(function(res) {

console.log('success')

}).fail(function(res) {

console.log('fail')

});

})

})

调整样式

原生H5inputfile太丑陋,调整文件上传样式,可以通过设置Input透明度为零的方式

逻辑实现

文件上传的逻辑处理 python代码

通过uuid生成唯一文件名,并且去除不合法字符,并且通过文件后缀名限制文件类型

@app.route('/upload/',methods={'post'})

def upload():

file=request.files['file']

if file.filename.find('.') > 0:

file_ext=file.filename.rsplit('.',1)[1].strip().lower()

#print(app.config['ALLOWED_EXT'])

if file_ext in app.config['ALLOWED_EXT']:

file_name=str(uuid.uuid1()).replace('-','')+'.'+file_ext

url=save_to_local(file,file_name)

if url!=None:

db.session.add(Image(url,current_user.id))

db.session.commit()

return redirect('/profile/%d' % current_user.id)

def save_to_local(file,file_name):

save_dir=app.config['UPLOAD_DIR']

file.save(os.path.join(save_dir,file_name))

return '/image/'+file_name

在app.conf里设定常量 设置文件格式 以及服务器存放位置

ALLOWED_EXT=set(['png','jpg','jpeg','bmp','gif'])

UPLOAD_DIR='D:/upload/'

通过插件进行测试,返回200,页面跳转到个人主页,即文件上传成功。可以进入到目录查看。

将图片上传到云上

申请七牛云账户,创建存储空间。

查看python sdk开发者文档 七牛Python sdk文档

官方文档

按照文档初始化 上传步骤执行

qiniusdk.py文件

from ins import app

from qiniu import Auth, put_stream, put_data

import os

#需要填写你的 Access Key 和 Secret Key

access_key = app.config['QINIU_ACCESS_KEY']

secret_key = app.config['QINIU_SECRET_KEY']

#构建鉴权对象

q = Auth(access_key, secret_key)

#要上传的空间

bucket_name = app.config['QINIU_BUCKET_NAME']

domain_prefix = app.config['QINIU_DOMAIN']

def qiniu_upload_file(source_file, save_file_name):

# 生成上传 Token,可以指定过期时间等

token = q.upload_token(bucket_name, save_file_name)

ret, info = put_data(token, save_file_name, source_file.stream)

print(type(info.status_code),info)

if info.status_code == 200:

return domain_prefix + save_file_name

return None

upload方法中仅仅更改一行代码,调用qiniusdk中编写的qiniu_upload_file方法,返回上传后的云端url地址,并添加到数据库中

@app.route('/upload/',methods={'post'})

def upload():

file=request.files['file']

file_ext=''

if file.filename.find('.') > 0:

file_ext=file.filename.rsplit('.',1)[1].strip().lower()

if file_ext in app.config['ALLOWED_EXT']:

file_name=str(uuid.uuid1()).replace('-','')+'.'+file_ext

#url=save_to_local(file,file_name)

url=qiniu_upload_file(file,file_name)

if url!=None:

db.session.add(Image(url,current_user.id))

db.session.commit()

打开浏览器,图片上传服务器成功,并且添加到了数据库中。

image.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值