当前位置:硬件测评 > 七牛云存储Python SDK使用教程-上传策略详解

七牛云存储Python SDK使用教程-上传策略详解

  • 发布:2023-10-05 07:54

-->
文字

七牛云存储Python SDK使用教程-上传策略详解

  • 七牛云存储
  • python-sdk
  • 七牛云存储教程
jemygraw 发表于 2015 年 1 月 4 日
  • 推荐 1 推荐
  • 收藏 2 个收藏,2,700 次浏览

本教程旨在介绍如何使用七牛的Python SDK快速上传、下载、处理、管理等文件。

前言

上面两节我们了解到,客户端上传文件时,需要向业务服务器申请上传令牌(Upload Token),而这个上传令牌是业务服务器根据上传策略生成的(PutPolicy),并且在这个生成过程中还必须使用AccessKey和SecretKey。

从上面的简单图我们可以看出:

  1. 上传客户端向业务服务器申请上传令牌(Upload Token)
  2. 业务服务器返回上传凭证给上传客户端
  3. 上传客户端构造上传请求,并将文件上传到七牛云存储服务器
  4. 七牛云存储服务器返回客户端上传文件的结果。

当然,在我们前面的例子和后面的例子中,上传客户端和业务服务器是一个,但是从业务模型的角度来看,步骤1和步骤2仍然是分开的(比如在网页上上传或在移动应用程序)。

上传策略

如果我们想研究七牛的上传策略,就必须了解它支持的所有参数(总共不多)。文档:单击此处。
乍一看,很多人可能会觉得参数太多,让人不知所措。事实上,情况并非如此。处理太多的事情,最好的办法就是按照不同的功能将它们分组。例如,我们可以将上传策略分为以下几组:

基本参数

基本参数包括文件上传后的存储空间、文件上传方式(是否支持覆盖上传)、上传凭证的过期时间、业务服务器指定的上传文件名称等。

参数名称 使用说明
范围 上传空间bucket,或bucket:key(用于支持文件叠加上传)。
截止日期 上传凭证的过期时刻时间戳一般用SDK中的expires参数设置,即deadline = now()+expires单位为
仅插入 默认为0。通过scope=bucket:key,可以支持覆盖上传。如果为1,则表示强制上传的语义是新建一个。如果文件存在,则会返回文件存在错误。
保存密钥 业务服务器可以通过该参数指定七牛云存储中保存的上传文件名称(仅当上传客户端未指定请求参数key时才生效)。
最终用户 可用于标记文件上传的设备信息,如手机类型、系统类型等。

自定义上传回复

默认情况下,七牛云存储返回给上传客户端的信息只包含hashkey,正如我们之前看到的:

{"哈希":"FoaI_ZzokcGpZA48PVJPFNJvLoNc","key":"FoaI_ZzokcGpZA48PVJPFNJvLoNc"}

那么有什么办法可以扩展这个稀疏的返回信息呢?

答案当然是:可以!

参数名称 使用说明
returnBody可用于自定义上传的回复内容。它支持魔术变量和自定义变量(也称为扩展变量)。关于变量的详细信息请查看文档:点击这里

上传完成的重定向

文件上传完成后,上传客户端从七牛云存储服务器获取上传结果的回复。在这个过程中,业务服务器没有参与,但是如果我想让七牛服务器在文件上传后告诉业务服务器一些信息呢?当然有可能。其中一种方法是页面重定向。当然,页面重定向需要知道重定向的地址(returnUrl)。另外,重定向到新地址携带的参数内容可以通过returnBody来设置。

文件上传完成后,七牛向上传者返回状态码303,然后上传者可以重定向到returnUrl指定的地址,例如重定向到http: //.../service/return_upload_service?upload_ret=eyJmbmFtZSI6InVwbG9hZF9kcmFmdC5wbmciLCJldGFnIjoiRnNOM0g4eS15NGxzcV9jZ2p0NEQ3a2E5cjVmUSIsImtleSI6IkZzTjNIOHkteTRsc3FfY2dqdDREN2th OX I1ZlEiLCJleFBhcmFtMSI6ImhlbGxvIiwiZXhQYXJhbTIiOiJxaW5pdSIsImV4UGFyYW0zIjoicWluaXUifQ==这样的地址,而这里returnUrl设置为http://.../service/return_upload_service,重定向地址携带的参数upload_ret的内容由returnBody指定。看起来upload_ret好像是base64编码,是的!是URL安全Base64编码(七牛应用中提到的base64编码一般都是URL安全Base64编码)。解码upload_ret以获取真实内容。

参数名称 使用说明
返回网址 上传者的重定向地址。
returnBody 上传者重定向时,用于组织携带的URL参数upload_ret的内容。

上传完成回调
上面我们看到了文件上传完成后七牛服务器和业务服务器进行交互的一种方式,这是通过上传侧的重定向来实现的。当然,这种方法是有适用场景的。但大多数情况下,我们七牛服务器和业务服务器之间的交互是采用另一种方式,称为回调。该回调发生在文件上传到七牛后。七牛会根据上传策略中参数callbackUrl指定的地址发送POST请求。请求的内容由上传策略中的指定。 CallbackBodycallbackHost指定,可用于指定回调的主机地址,例如IP地址。另外,callbackBody的内容组织格式为,由callbackBodyType决定。七牛服务器会根据callbackBodyType设置发送到业务服务器的POST请求的Content-Type。目前支持application/x-www-form-urlencodedapplication/json这两种格式。

参数名称 使用说明
回调网址 七牛服务器回调业务服务器地址必须是公网可访问且能够接受POST请求的地址。
callbackBody 定义七牛服务器回调业务服务器时POST请求的Body内容。
callbackBodyType指定callbackBody的内容格式,支持两种格式:urljson
回调主机 指定具体的回调主机地址,可以设置为IP地址,以节省DNS解析时间。

上传后触发持久化
我们知道七牛支持很多图像、音频、视频处理的接口和指令。假设我想从PC上上传一张图片或视频,然后在上传完成后立即触发七牛的文件处理指令。将上传的文件进行处理以支持不同平台上的文件,那么我可以使用以下三个参数。

参数 使用说明
持久操作 数据处理指令集,之所以称为指令集是因为它支持对原始文件的多个处理指令。每条指令都通过; 连接。这里的指令比如​​imageView2avthumbvframe等等。
persistentNotifyUrl 该地址用于接收七牛服务器数据处理结果。它接收到的数据内容与使用接口prefop文档查询的内容格式完全相同。
持久管道 指定用于数据处理的队列名称。这个队列可以在七牛的后台管理系统中创建。如果不指定,则表示使用公共队列,数据处理效率可能会低于指定的私有处理队列。

文件上传限制
我们可以在上传策略中指定最大文件上传大小和允许的文件类型。

参数 使用说明
fsizeLimit 上传文件的最大大小,以字节为单位。
mimeLimit文件上传的类型可以通过允许的语义(image/jpeg; image/png,表示只允许jpeg和png格式的图片)或不允许的语义(! application/json ;text/plain,表示不允许指定json和纯文本文件)。

相关文章