文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

使用python cgi上传文件并计算m

2023-01-31 02:33

关注

对文件拷贝后进行MD5值比较,看是不是拷贝完全。google和baidu上都是使用md5模块读取所有的文件进内存,在计算md5,导致计算超过1G大小的文件报错。增量计算MD5的方法:

#!/usr/bin/python
import hashlib
import sys
def main():
        if len(sys.argv) != 2:
                sys.exit('usage:%s file' % sys.argv[0])
        filename = sys.argv[1]
        md5 = hashlib.md5()
        with open(filename,'rb') as fp:
                while True:
                        blk = fp.read(4096)
                        if not blk:break
                        md5.update(blk)
        print md5.hexdigest(),filename

if __name__ == '__main__':
        main()


这个效果一样,使用md5,上面使用的hashlib:

#!/usr/bin/python
import md5
import sys
def main():
        if len(sys.argv) != 2:
                sys.exit('usage:%s file' % sys.argv[0])
        filename = sys.argv[1]
        m = md5.new()
        with open(filename,'rb') as fp:
                while True:
                        blk = fp.read(4096)
                        if not blk:break
                        m.update(blk)
        print m.hexdigest(),filename

if __name__ == '__main__':
        main()


——————————————————分割线——————————————————


上面例子的应用

计算上传文件的md5值,并显示文件大小:

#!/usr/bin/python
# -*- coding:utf-8 -*-
import cgi, os
import cgitb; cgitb.enable()
import md5

form = cgi.FieldStorage()

fileitem = form['filename']
if fileitem.filename:
    #fn = os.path.basename(fileitem.filename)
    #open('/tmp/' + fn, 'wb').write(fileitem.file.read())
    message = 'Got file %s"' % cgi.escape(fileitem.filename)
    m = md5.new()
    size = 0
    while True:
        data = fileitem.file.read(4096)
        if not len(data):
            break
        size += len(data)
        m.update(data)
    #open('/tmp/' + fn, 'wb').write(data)
    li = 'Received file of %d bytes. MD5sum is %s' % (size,m.hexdigest())

else:
    message = 'No file was uploaded'

print """\
Content-Type: text/html\n
<html>
<body>
   <p>%s</p>
   <p>%s</p>
</body>
</html>
""" % (message,li)

MD5.html:

<html>
<body>
   <form enctype="multipart/form-data" 
                     action="/op/md5_file.py" method="post">
   <p>File: <input type="file" name="filename" /></p>
   <p><input type="submit" value="md5" /></p>
   </form>
</body>
</html>


效果:

wKioL1RsK4Xx88r2AACFvwfYywc863.jpg

点击md5,计算文件的md5值

wKiom1RsK2OCDLXYAADh6gKnso8100.jpg

——————————————————分割线——————————————————


跟上个例子类似,功能不一样

python cgi上传文件:

#!/usr/bin/python
# -*- coding:utf-8 -*-
import cgi, os
import cgitb; cgitb.enable()

form = cgi.FieldStorage()

# 获取文件名
fileitem = form['filename']

# 检测文件是否上传
if fileitem.filename:
   # 设置文件路径 
   fn = os.path.basename(fileitem.filename)
   open('/tmp/' + fn, 'wb').write(fileitem.file.read())

   message = 'The file "' + fn + '" was uploaded successfully'

else:
   message = 'No file was uploaded'

print """\
Content-Type: text/html\n
<html>
<body>
   <p>%s</p>
</body>
</html>
""" % (message,)

index.html

<html>
<body>
   <form enctype="multipart/form-data" 
                     action="/op/save_file.py" method="post">
   <p>File: <input type="file" name="filename" /></p>
   <p><input type="submit" value="Upload" /></p>
   </form>
</body>
</html>

效果:

wKiom1RsKXKBRoclAABjPviMZIw179.jpg

点击Upload,显示上传成功

wKiom1RsKcCST4L7AACTALCJiW8111.jpg


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯