遇到2个小坑,记录一下~
菜鸟教程原文如下:
文件上传实例
HTML设置上传文件的表单需要设置 enctype 属性为 multipart/form-data,代码如下所示:
实例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob)</title>
</head>
<body>
<form enctype="multipart/form-data"
action="/cgi-bin/save_file.py" method="post">
<p>选中文件: <input type="file" name="filename" /></p>
<p><input type="submit" value="上传" /></p>
</form>
</body>
</html>
save_file.py 脚本文件代码如下:
实例
#!/usr/bin/python3
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 = '文件 "' + fn + '" 上传成功'
else:
message = '文件没有上传'
print ("""\
Content-Type: text/html\n
<html>
<head>
<meta charset="utf-8"> -------------这一行删除,否则会造成乱码
<title>菜鸟教程(runoob)</title>
</head>
<body>
<p>%s</p>
</body>
</html>
""" % (message,))
1、点击上传后网页出现乱码问题
之前有介绍过,可以在py脚本的开头添加以下2行解决网页乱码问题
import codecs,sys
sys.stdout = codecs.getwriter('utf8')(sys.stdout.buffer)
这几天又发现了另外一种方式解决乱码,就是不用添加以上2行,只需要将py文件中的一行注释掉(或删除掉)即可
即这一行: <meta charset="utf-8">
关于中文乱码问题,目前还没有系统的理论,只能停留在解决问题的层面上,等后面了解了原理应该会再发一篇讲解一下。
2、点击上传后网页出现internal server error问题
是因为文件存储路径书写不正确,除了将教程中的linux路径换成windows路径以外,还需要在windows路径的最后添加斜杠/,并且在整个路径字符串的开头加上r,不允许字符串转义,这样才能保证路径被正确读取
open(r'D:\apache2.4.54\Apache24\uploadfiles/' + fn, 'wb').write(fileitem.file.read())
成功上传后如下所示
完成。
更多推荐
Python CGI编程--文件上传实例(菜鸟教程)
发布评论