Code Monkey home page Code Monkey logo

seven-cow's Introduction

Seven Cow 七牛

另一个七牛云存储Python SDK

这是一个比官方更易用的SDK。 官方SDK请见 官方SDK

Install

pip install sevencow

Usage

初始化

在你需要的地方

from sevencow import Cow
cow = Cow(<ACCESS_KEY>, <SECRET_KEY>)

然后就可以通过 cow.stat(<BUCKET>, <FILENAME>) 这样来进行操作. 但为了简化操作,并且考虑到大多数都是在一个bucket中进行文件操作, 所以建议再做一步:

b = cow.get_bucket(<BUCKET>)

后面都用这个b对象来操作。 它代表了<BUCKET>

列出所有的bucket

cow.list_buckets()

列出一个bucket中的所有文件

b.list_files()

这个方法还有 marker, limit, prefix这三个可选参数,详情参考官方文档

上传

# Bucket.put(filename, data=None, keep_name=False, override=True)
# filename:  文件名。 或者是从磁盘文件上传,就是文件路径
# data:      如果从buffer中上传数据,就需要此参数。表示文件内容。
# keep_name: 上传后的文件是否保持和filename一样。默认为False,用文件内容的MD5值
# override:  上传同名文件,是否强制覆盖
b.put('a')                    # 上传本地文件a,并且用a内容的MD5值作为上传后的名字
b.put('a'keep_name=True)   # 上传本地文件a,并且用a作为上传后的名字
b.put('a', data=data)         # 把`data`数据上传,用`data`的MD5值作为上传后的名字
                                这种的使用场景是你直接有了一个file-like的对象在内存中比如通过浏览器上传的文件此时你就不用把文件先写入磁盘而是直接把文件内容读出直接上传

删除,查看文件信息

b.stat('a')                 # 查看单个文件信息
b.delete('a')               # 删除单个文件

拷贝,移动(改名)

这两个操作需要提供源文件名和目标文件名

b.copy('a', 'b')                            # 将'a' 拷贝至'b'
b.move('a', 'b')                            # 将'a' 改名为'b'

有没有觉得比官方SDK容易使用多呢?


异常

以上操作任何错误都会引发异常, 只要请求api返回的不是200

所以安全的做法是这样:

from sevencow import CowException

try:
    b.put('a')
except CowException as e:
    print e.url         # 出错的url
    print e.status_code # 返回码
    print e.content     # api 错误的原因

测试

  1. 首先从github clone项目到本地

  2. 测试需要三个环境变量

    export QINIU_ACCESS_KEY=<...>
    export QINIU_SECRET_KEY=<...>
    export QINIU_BUCKET=<...>

    QINIU_BUCKET 要先在web中建立

  3. 在项目目录中直接运行 nosetests

seven-cow's People

Contributors

yueyoum avatar

Stargazers

Zereph Dandre avatar liu dongming avatar fufu avatar xjohjrdy avatar badb0y avatar  avatar 亨 avatar 2137quadfa avatar  avatar davidycx avatar  avatar sphawkcn avatar  avatar  avatar  avatar  avatar 蚂蚁先生 avatar Otfot avatar ranjiayu avatar AndroidKy avatar 孟静磊 avatar  avatar Les1ie avatar  avatar Jinghao Lu avatar leewish avatar 远哥制造 avatar  avatar menduo avatar zhiyue avatar  avatar 碎ping子 avatar 刘备胎 avatar  avatar  avatar kerneltravel avatar Paul Lee avatar siva avatar  avatar ahui avatar HarryZhu avatar Gevin avatar dupola avatar GaniksLiu avatar blueden chen avatar Bob Liu avatar JG avatar Yangzh avatar buren avatar  avatar svcvit avatar Asahi avatar luoyibu avatar Wesley avatar Heiybb avatar Kelvin avatar 炸鸡叔 avatar Yunzheng avatar shajiquan avatar Allen Galler avatar xueshi avatar Dandi Wong avatar  avatar 武子 avatar  avatar  avatar Zhuang Yongyao avatar  avatar Xiaonan Cui avatar Juno Ho avatar ineo6 avatar  avatar Layman avatar Sean Lin avatar Xiaoning Wu avatar  avatar eagleon avatar ladder1984 avatar xc avatar  avatar andywu avatar ehocchen avatar Lyndon avatar mite.chen avatar zqhong avatar jie avatar  avatar  avatar 符浩 avatar Robin Wen avatar Chester Liu avatar adslyw avatar Xiaolu Xiong avatar septs avatar ijump avatar fliu avatar 徐兆魁 avatar Fechin avatar Cheney Wong avatar alsotang avatar

Watchers

Allen Galler avatar  avatar Lyndon avatar James Cloos avatar Hsin Wong avatar  avatar David Lee avatar  avatar Layman avatar 碎ping子 avatar zarzcn avatar  avatar

seven-cow's Issues

报错 ModuleNotFoundError

Traceback (most recent call last):
File "assess.py", line 3, in
from sevencow import Cow
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/sevencow.py", line 10, in
from urlparse import urlparse
ModuleNotFoundError: No module named 'urlparse'

fixed 614

七牛有个上传防覆盖机制,即同文件名同内容文件上传则更新文件puttime,若同文件名不同内容则返回614 错误代码。

下面修改可强制覆盖

        url = '%s/upload' % UP_HOST
-        token = self.generate_upload_token(scope)
+        token = self.generate_upload_token('%s:%s' % (scope, filename))
        names = names or {}

文档: http://developer.qiniu.com/docs/v6/api/reference/security/put-policy.html

这个不能创建缩略图吧?

python菜鸟,为网站添加上传图片功能。需求:缩略图。
另外,这个sdk你还在更新不,如果七牛自己更新了,这边不能用了怎么办呀。。

如何回调图片的信息呢?

我理解在图片上传时,即使是上传buffer中的文件也需要有‘a’这个filename,是因为最后存储在七牛云中的文件命名是以图片内容的md5命名再加上前面filename里面通过os.path.slitext所分离出来的后缀拼成的,那么在上传成功后如何获得图片的存储信息呢?主要是图片存储的URL路径

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.