七牛云存储
七牛云基本使用
注册登录
注册登录后先买了个新人优惠
对象存储
创建一个标准存储
新建空间
填写信息
文件上传
可以批量上传
可以选择多个文件上传
刷新页面,可以看到了
访问文件
点击文件详情
复制访问地址
访问链接,正常访问到
创建目录
还可以提供点击下载
虽然空间是私有,但是下面的图片之类的是可以访问的
python使用七牛云存储
https://developer.qiniu.com/kodo/1242/python
普通上传文件
我们复制一份官网示例上传代码
# -*- coding: utf-8 -*- # flake8: noqa from qiniu import Auth, put_file, etag import qiniu.config #需要填写你的 Access Key 和 Secret Key access_key = 'Access_Key' secret_key = 'Secret_Key' #构建鉴权对象 q = Auth(access_key, secret_key) #要上传的空间 bucket_name = 'Bucket_Name' #上传后保存的文件名 key = 'my-python-logo.png' #生成上传 Token,可以指定过期时间等 token = q.upload_token(bucket_name, key, 3600) #要上传文件的本地路径 localfile = './sync/bbb.jpg' ret, info = put_file(token, key, localfile, version='v2') print(info) assert ret['key'] == key assert ret['hash'] == etag(localfile)
找到ak sk
将官网示例修改一下,ak sk 空间名 ,要上传的文件在那里,保存为什么名字,程序运行成功
去页面可以看到保存的图片
我想上传到mcwdir目录中呢,给要保存的文件名,添加上相对目录就行,
再次去页面查看,上传了的
前面加上从根开始的路径也是可以的
上传文件函数,返回结果我们用两个参数接收,里面都又key,也就是文件名名字
上传文件加回调
上传文件到七牛云,我们需要上传文件的大小,地址等等一些信息
# -*- coding: utf-8 -*- # flake8: noqa from qiniu import Auth, put_file, etag import qiniu.config access_key = 'Access_Key' secret_key = 'Secret_Key' q = Auth(access_key, secret_key) bucket_name = 'Bucket_Name' key = 'my-python-logo.png' #上传文件到存储后, 存储服务将文件名和文件大小回调给业务服务器。 policy={ 'callbackUrl':'http://your.domain.com/callback.php', 'callbackBody':'filename=$(fname)&filesize=$(fsize)' } token = q.upload_token(bucket_name, key, 3600, policy) localfile = './sync/bbb.jpg' ret, info = put_file(token, key, localfile, version='v2') print(info) assert ret['key'] == key assert ret['hash'] == etag(localfile)
修改ak sk,修改空间名,key 和需要上传的文件,执行。报错了
生成了这样一个文件夹
我们上传的不是从根目录开始已有的文件夹,而是新生成一个文件夹,将我那个带有目录的文件都放到这个文件夹
这显然不是我们想要的
即使将key前面根去掉,还是报错了,但是文件上传成功的,是上传到想要的目录。
我们看一下info信息,
info: _ResponseInfo__response:<Response [579]>, exception:None, status_code:579, text_body:{ "error":"{\"callback_url\":\"http://your.domain.com/callback.php\",\"callback_bodyType\":\"application/x-www-form-urlencoded\"," "\"callback_body\":\"filename=touxiang2.jpg\\u0026filesize=18378\",\"token\":\"\",\"err_code\":502," "\"error\":\"Post \\\"http://your.domain.com/callback.php\\\": dial tcp: lookup your.domain.com on 10.22.12.241:53: no such host\"," "\"hash\":\"FhY_XyKuELdPD_YdvURKjSylqGhW\",\"key\":\"mcwdir/my-touxing5.png\"}"}, req_id:7s0AAABHK4pJ6S0X, x_log:X-Log, error:{"error":"{\"callback_url\":\"http://your.domain.com/callback.php\"," "\"callback_bodyType\":\"application/x-www-form-urlencoded\",\"callback_body\":" "\"filename=touxiang2.jpg\\u0026filesize=18378\",\"token\":\"\",\"err_code\":502,\"error\":\" ""Post \\\"http://your.domain.com/callback.php\\\": dial tcp: lookup your.domain.com on 10.22.12.241:53: no such host\"," \ "\"hash\":\"FhY_XyKuELdPD_YdvURKjSylqGhW\",\"key\":\"mcwdir/my-touxing5.png\"}"}
我们这里回调地址没有写成自己的,显然报错很正常,这是回调失败
我们用这个域名替换下
删除图片
删除方法如下:
官网源码,删除单个文件
# -*- coding: utf-8 -*- # flake8: noqa from qiniu import Auth from qiniu import BucketManager access_key = 'Access_Key' secret_key = 'Secret_Key' #初始化Auth状态 q = Auth(access_key, secret_key) #初始化BucketManager bucket = BucketManager(q) #你要测试的空间, 并且这个key在你空间中存在 bucket_name = 'Bucket_Name' key = 'python-logo.png' #删除bucket_name 中的文件 key ret, info = bucket.delete(bucket_name, key) print(info) assert ret == {}
我们将删除文件封装为函数,需要传要删除的文件名,要将ak sk ,空间名改成自己要删除的对应的,这里我们打印一下看返回信息
我们想要将下面文件删除掉
将文件名字传入
执行程序,运行正常,也就i是正常删除,因为ret返回为空,所以删除的函数没有将ret作为返回值。
在七牛云上也无法看到这个图片了,已经成功将文件删除。这里只需要调用函数,传文件名字就可以删除这个文件了