前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用python cgi上传文件并计算m

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

作者头像
py3study
发布2020-01-13 00:05:43
9200
发布2020-01-13 00:05:43
举报
文章被收录于专栏:python3python3

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

代码语言:javascript
复制
#!/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:

代码语言:javascript
复制
#!/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值,并显示文件大小:

代码语言:javascript
复制
#!/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:

代码语言:javascript
复制
<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
wKioL1RsK4Xx88r2AACFvwfYywc863.jpg

点击md5,计算文件的md5值

wKiom1RsK2OCDLXYAADh6gKnso8100.jpg
wKiom1RsK2OCDLXYAADh6gKnso8100.jpg

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

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

python cgi上传文件:

代码语言:javascript
复制
#!/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

代码语言:javascript
复制
<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
wKiom1RsKXKBRoclAABjPviMZIw179.jpg

点击Upload,显示上传成功

wKiom1RsKcCST4L7AACTALCJiW8111.jpg
wKiom1RsKcCST4L7AACTALCJiW8111.jpg
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-08-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档