MsSQL   发布时间:2022-05-16  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了sql – 使用原始文件名上传web2py大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想用sql.factory()上传文件
我只想保留原始文件名
我的代码目前是
form = sqlFORm.factory(
    Field('file_name',requires=IS_NOT_EMPTY()),Field('file','upload',uploadfolder=upload_folder))
if form.accepts(request.vars,session):  #.process().accepted:
    response.flash = u'File uploaded'
    session.your_name = form.vars.file_name
    session.filename = request.vars.file 
elif form.errors:
    response.flash = 'form has errors'
return Dict(form=form)

我想session.filename = request.vars.file是你设置文件名的地方.为什么我得到自动生成的文件名no_data.smth.23u8o8274823zu4i2.smth

谢谢

解决方法

首先,request.vars.file是一个Python cgi.FieldStorage对象,因此session.filename = request.vars.file会导致错误. request.vars.file.file是实际的文件对象,request.vars.file.filename是上载文件的原始名称.

通过上载字段上载文件时,web2py会自动生成“table_name.field_name.random_id.b16encoded_original_filename.extension”形式的新名称.这样做是为了防止目录遍历攻击并启用下载机制(需要知道表和字段名称).对于sqlFORm.factory,没有数据库表名,因此默认为表名为“no_table”.

您显示的代码实际上不应生成像’no_data.smth.23u8o8274823zu4i2.smth’这样的文件名.该文件名意味着您已明确告知sqlFORm.factory使用表名’no_data'(通过其table_name参数)并且上传字段名称为’smth’. (上面的代码会生成一个以’no_table.file’开头的文件名.)

注意,web2py会自动获取上传文件的原始名称,并将其编码(使用b16encodE)到新文件名中(然后在使用内置下载机制时解码原始文件名).原始文件名也可在form.vars.file.filename中使用.因此,您根本不需要用户输入文件名.但是,如果要使用户能够输入可能与实际文件名不同的文件名,然后使用用户输入的文件名,则可以在创建表单之前添加以下内容:

if 'file' in request.vars and request.vars.file_name:
    request.vars.file.filename = request.vars.file_name

这将重新将上载文件的文件名分配给用户输入的值,然后web2py将用户输入的文件名编码为新文件名.但请注意,web2py依赖于文件扩展名来在下载时适当地设置http标头,因此您可能需要添加一些逻辑以获取原始文件扩展名,以防用户输入错误.

大佬总结

以上是大佬教程为你收集整理的sql – 使用原始文件名上传web2py全部内容,希望文章能够帮你解决sql – 使用原始文件名上传web2py所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: