Python的Django中将文件上传至七牛云存储的代码分享

作者:theqwang 时间:2023-11-28 14:00:24 

最近在写的一个django小项目需要实现用户上传图片的功能,使用到了七牛云存储,特此记录下来。这里我使用的七牛python SDK 版本是7.0.3,函数使用上可能会与旧版有些不同。

原本文件上传需要先把文件上传到自己的业务服务器,再从业务服务器上传到云存储。现在七牛的表单上传可以直接把文件上传到七牛,不再需要业务服务器的中转,节省了流量成本,降低了业务服务器的压力。而且通过设置,还可以在文件上传完成后让客户端自动重定向到一个上传成功的结果页面。这里我就是使用了七牛的表单上传。

表单上传

用户上传图片的HTML表单代码如下。其中key用来指定图片保存在七牛中的文件名,token是上传凭证,即用来验证合法性和设置返回信息的。

upload.html


<form method="POST" action="http://upload.qiniu.com/" enctype="multipart/form-data">
<input name="key" type="hidden" value="">
<input name="token" type="hidden" value="">
<input name="file" type="file">
<input type="submit">
</form>

跳转到上面HTML页面的视图函数中的关键代码如下。其中upload_token函数用于生成表单里的token字段,upload_token函数中的7200代表上传凭证的有效期,returnUrl表示上传成功后的重定向地址,returnBody表示重定向时七牛返回的信息,它是一个base64编码后的json数据,需要解码获取json数据,当上传出错时错误信息直接在url中以明文的形式出现,并不会在返回的json数据里。通过设置mimeLimit还可以限制上传文件的类型。

views.py


import qiniu
import uuid
ACCESS_KEY = '七牛分配的公钥'
SECRET_KEY = '七牛分配的私钥'
BUCKET_NAME = '保存文件的仓库名'
key = str(uuid.uuid1()).replace('-', '') # 这里使用uuid作为保存在七牛里文件的名字。并去掉了uuid中的“-”
q = qiniu.Auth(ACCESS_KEY, SECRET_KEY)
token = q.upload_token(BUCKET_NAME, key, 7200, {'returnUrl':'http://127.0.0.1:8000/photos/uploadprocessor', 'returnBody': '{"name": $(fname), "key": $(key)}', 'mimeLimit':'image/jpeg;image/png'})
return render_to_response('photos/upload.html', {'token': token, 'key': key}, context_instance=RequestContext(request))
标签:Python,七牛
0
投稿

猜你喜欢

  • css样式表滤镜全接触

    2007-10-26 12:48:00
  • SQLSERVER 中datetime 和 smalldatetime类型分析说明

    2024-01-23 23:36:13
  • PHP中让json_encode不自动转义斜杠“/”的方法

    2023-07-12 22:44:58
  • Python批量修改文件名的方式详解

    2023-05-15 20:56:08
  • python实现对服务器脚本敏感信息的加密解密功能

    2022-11-07 08:35:11
  • 使用IDEA回滚某次提交的代码步骤

    2023-06-21 03:15:28
  • 小程序自定义弹出框效果

    2023-07-02 03:47:33
  • Python面向对象程序设计之类的定义与继承简单示例

    2022-03-24 03:00:16
  • django 扩展user用户字段inlines方式

    2022-02-28 00:50:14
  • Python语音合成之第三方库gTTs/pyttsx3/speech横评(内附使用方法)

    2022-03-23 08:31:22
  • 在Oracle中向视图中插入数据的方法

    2009-02-28 10:42:00
  • JavaScript函数封装的示例详解

    2024-04-25 13:15:51
  • Python删除字符串中字符的四种方法示例代码

    2021-09-25 08:23:25
  • 利用Python脚本实现传递参数的三种方式分享

    2023-07-11 03:45:44
  • 基于php+mysql的期末作业小项目(学生信息管理系统)

    2023-06-13 00:39:34
  • Python编程给numpy矩阵添加一列方法示例

    2023-08-29 07:22:30
  • Python内建模块struct实例详解

    2022-07-06 02:10:18
  • js实现登录注册框手机号和验证码校验(前端部分)

    2023-09-13 02:41:37
  • 详解Python中的魔法函数与量子计算模拟

    2021-05-18 23:13:47
  • python批量导入数据进Elasticsearch的实例

    2022-06-29 16:08:02
  • asp之家 网络编程 m.aspxhome.com