web2py的upload已上传文件的改名存储

前面我们已讲到,web2py相关的upload字段上传的文件进行了加密命名机制,保证了数据安全,格式为:

“表名+字段名+UUID+BASE编码加密后的源文件名” 

下载文件时,web2py会自动解码加密的原始文件名供我们下载,对于已上传了的文件,我们还想更改原始文件名怎么办,假设有下表,人员信息,存一张照片,上传的照片文件名就是人员的name:

db.define_table('person',

Field('name','string',label='姓名',writable=False),

Field('photo','upload',label='影像',

uploadfolder=os.path.join(request.folder,'photo'),uploadseparate=True,autodelete=True))
 

1、我们发现,叫"阿顺"的照片传错了,应该是“阿乐”,我们要更改一下:

record = db(db.person.name == "阿顺").select().first()
new_web2py_name = uploadfile_rename(record.photo,“阿乐”+'.jpg')
db(db.person.id == record.id).update(name=“阿乐”,photo=new_web2py_name)

2、uploadfile_rename 函数
我们上面自己编写了一个 uploadfile_rename函数用于web2py的文件加密体系,需要2个参数:原加密的文件名,新的文件名,这里我们使用到了web2py自带的filed类。

def uploadfile_rename(web2py_file_name,new_file_name):

    web2py_file_name_split = web2py_file_name.split('.')
    field = db[web2py_file_name_split[0]][web2py_file_name_split[1]]
    file_path = field.retrieve_file_properties(web2py_file_name)
    source_file = open(file_path['path']+'\\'+web2py_file_name, 'rb')
    new_web2py_name = field.store(source_file, new_file_name, field.uploadfolder)
    source_file.close()
    #其实不是文件改名,是用web2py的field类重新生了一个文件,所以老文件直接删除了
    os.unlink(file_path['path']+'\\'+web2py_file_name)
    return new_web2py_name

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值