在Python中使用CherryPyWSGI服务器实现文件上传与下载功能
发布时间:2023-12-26 02:51:40
实现文件上传和下载功能可以使用CherryPy的tools.staticdir和tools.staticfile工具,并结合CherryPy的路由功能。
下面是一个使用CherryPy实现文件上传和下载功能的示例代码:
import os
import cherrypy
from cherrypy.lib.static import serve_file
class FileHandler(object):
@cherrypy.expose
def index(self):
return """
<html>
<head></head>
<body>
<h1>文件上传与下载示例</h1>
<form method="post" enctype="multipart/form-data" action="upload">
<input type="file" name="myFile" />
<button type="submit">上传文件</button>
</form>
<br>
<a href="download?filename=myfile.txt">下载文件</a>
</body>
</html>
"""
@cherrypy.expose
def upload(self, myFile):
upload_dir = "./uploads"
if not os.path.exists(upload_dir):
os.makedirs(upload_dir)
save_path = os.path.join(upload_dir, myFile.filename)
with open(save_path, 'wb') as f:
while True:
data = myFile.file.read(8192)
if not data:
break
f.write(data)
return "文件上传成功!"
@cherrypy.expose
def download(self, filename):
download_dir = "./uploads"
file_path = os.path.join(download_dir, filename)
return serve_file(file_path, "application/x-download", "attachment")
if __name__ == '__main__':
config = {
'/': {
'tools.staticdir.on': True,
'tools.staticdir.dir': os.path.abspath(os.path.dirname(__file__))
}
}
cherrypy.config.update({'server.socket_host': '0.0.0.0'})
cherrypy.quickstart(FileHandler(), "/", config=config)
在上述代码中,使用CherryPy提供的tools.staticdir工具来服务静态文件,将当前目录作为根目录。当访问根URL时,显示一个包含文件上传和下载功能的页面。文件上传通过一个POST请求来处理,并将上传的文件保存在./uploads目录下。文件下载通过cherrypy.lib.static.serve_file函数来实现,并添加Content-Disposition头部,使浏览器将其作为附件下载。
启动以上代码后,您可以通过http://localhost:8080访问示例页面。页面显示一个文件上传的表单和一个文件下载的链接。您可以选择一个文件点击“上传文件”按钮来上传文件,并点击“下载文件”链接来下载刚刚上传的文件。
注意,该示例没有添加身份验证或文件类型检查等安全措施,仅供演示。在实际应用中,建议添加适当的安全和验证机制来保护文件上传和下载功能。
