python中的实用程序类,用于查找、保存和删除amazon s3或本地文件系统上的文件。

s3-saver的Python项目详细描述


python中的实用程序类,用于查找、保存和删除amazon s3或本地文件系统上的文件。

这背后的想法是,不管您使用的是本地文件还是基于s3的文件,都可以传递完全相同的数据(特别是相同的文件路径)。在每次调用时,您所要做的就是为s3指定's3',或者为local指定none。

对于所有文件都存储在一个环境(如开发)中的本地文件系统和另一个环境(如生产)中的s3上的应用程序来说,这是非常好的。在运行时,您唯一需要解决的问题是,是指定's3'还是不指定-其余的文件处理代码保持不变。

示例

对于一个完整的、工作的flask应用程序,它演示了s3的实际应用,请看一下flask-s3-save-example

用法

fromioimportBytesIOimportosfroms3_saverimportS3Saverbucket_name='s3-test-foobar-whizbang'# Absolute path to your project's rootstatic_root_parent='/home/mrfoo/pyprojectfoo'# Absolute path to dir where file gets savedbase_path=os.path.join(static_root_parent,'static/uploads')# For a dummy object that attributes can get saved to.# In most real-life cases, this would be an ORM model# (e.g. inherited from django.db.models.Model for Django, or# sqlalchemy.ext.declarative.declarative_base() for SQLAlchemy).classThingy(object):pass# Load a sample file into a temp objectfilename='whizbang.jpg'filepath=os.path.join(base_path,filename)thingy=Thingy()temp_file=BytesIO()# Read a local file into a BytesIO object.# For most real-life cases, you'd instead load a file uploaded# in a HTTP POST request into a BytesIO. E.g. in a Flask route:# from flask import request# request.files['thingy_image'].save(temp_file)f=open('/home/mrfoo/photos/hobbies/whizbang.jpg','rb')f.seek(0)one_mb=1024*1024t=f.read(one_mb)whilet:temp_file.write(t)t=f.read(one_mb)f.close()# Initialize the saverimage_saver=S3Saver(storage_type='s3',bucket_name=bucket_name,access_key_id='XXXXX',access_key_secret='YYYYY',field_name='image',storage_type_field='image_storage_type',bucket_name_field='image_storage_bucket_name',filesize_field='image_filesize',base_path=base_path,static_root_parent=static_root_parent)# Save the file to S3, in the specified bucket,# at 'static/uploads/whizbang.jpg'image_saver.save(temp_file,filename,thingy)print(thingy.image)# 'whizbang.jpg'print(thingy.image_storage_type)# 's3'print(thingy.image_storage_bucket_name)# 's3-test-foobar-whizbang'# In most real-life cases, you'd persist the 'thingy' object# at this point. E.g. in SQLAlchemy:# db.session.add(thingy)# db.session.commit()# Now save the file locally,# at '/home/mrfoo/pyprojectfoo/static/uploads/whizbang.jpg'image_saver.storage_type=Noneimage_saver.save(temp_file,filename,thingy)print(thingy.image)# 'whizbang.jpg'print(thingy.image_storage_type)# ''print(thingy.image_storage_bucket_name)# ''# Find files on S3, searching by key prefix.# Prints:# [u'static/uploads/whizbang.jpg']print([k.nameforkinimage_saver.find_by_path('/home/mrfoo/pyprojectfoo/static/uploads/whizb',storage_type='s3',bucket_name=bucket_name)])# Find files locally, searching by glob.# Prints:# ['/home/mrfoo/pyprojectfoo/static/uploads/whizbang.jpg']print([kforkinimage_saver.find_by_path('/home/mrfoo/pyprojectfoo/static/uploads/whizb',storage_type=None,bucket_name=bucket_name)])# Delete the file on S3.image_saver.delete('/home/mrfoo/pyprojectfoo/static/uploads/whizbang.jpg',storage_type='s3',bucket_name=bucket_name)# Delete the file locally.image_saver.delete('/home/mrfoo/pyprojectfoo/static/uploads/whizbang.jpg',storage_type=None,bucket_name=bucket_name)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用哪个地图/集合?   bluej Java:计算税   由于性能问题,java双精度字符串替代方案   java Eclipse CDT生成设置因重新启动而丢失   如何在java控制台中显示字节流值   java获取url地址,其中是包含我的页面的iframe   java 403禁止的spring启动API调用错误?   如果一个方法返回true,java将停止计时器   使用JavaNIO获取文件创建日期   在Java中从整数转换为二进制时保留整个字节的字符串   java AspectJ&Maven警告:“未应用……中定义的建议?”   java为什么我得到3,我不应该得到+7   java当一个方法包含多个返回的if语句时,如何从该方法中获取返回值?   在运行时循环java(scan.nextLine()!="$")   java配置休眠。cfg。春天的xml   java使用HtmlUnit模拟用户,错误   java CLI如何持续检查更改   java最大素因子(返回)