欢迎访问宙启技术站
智能推送

利用Bottle框架实现文件上传和下载功能

发布时间:2024-01-18 00:38:02

Bottle是一个简单而快速的Python Web框架,它适用于小型应用程序和API开发。在Bottle框架中实现文件上传和下载功能非常简单。下面是一个使用Bottle框架实现文件上传和下载功能的例子。

首先,我们需要安装Bottle框架。可以使用pip命令来安装Bottle:

pip install bottle

接下来,我们创建一个名为app.py的Python文件,并在文件中导入Bottle模块:

from bottle import route, run, request, static_file

### 文件上传功能

要实现文件上传功能,我们需要创建一个POST请求处理函数,并使用request.files获取上传的文件。在处理函数中,我们可以将文件保存到服务器的指定目录中。以下是一个实现文件上传功能的例子:

@route('/upload', method='POST')
def upload():
    upload_file = request.files.get('file')
    if upload_file:
        save_path = '/path/to/save/file/' + upload_file.filename
        upload_file.save(save_path)
        return f'File {upload_file.filename} is uploaded successfully.'
    else:
        return 'No file uploaded.'

在这个例子中,我们定义了一个处理POST请求的upload函数,函数路径为/upload。我们使用request.files.get('file')来获取上传的文件,并将文件保存到服务器的指定目录中。如果文件成功上传,则返回成功消息,如果没有文件上传,则返回相应的提示消息。

### 文件下载功能

要实现文件下载功能,我们需要创建一个GET请求处理函数,并使用static_file函数来提供文件下载。以下是一个实现文件下载功能的例子:

@route('/download/<filename>')
def download(filename):
    return static_file(filename, root='/path/to/download/file', download=filename)

在这个例子中,我们定义了一个处理GET请求的download函数,函数路径为/download/<filename>。我们使用static_file函数来提供文件下载,指定要下载的文件名和文件保存的根目录。download=filename参数将强制浏览器下载文件,而不是在浏览器中打开。

注意:在定义处理函数前,我们需要使用@route装饰器将函数路径与处理函数绑定起来。

最后,我们可以使用run函数来运行应用程序,并指定主机和端口号。以下是完整的例子:

from bottle import route, run, request, static_file

@route('/upload', method='POST')
def upload():
    upload_file = request.files.get('file')
    if upload_file:
        save_path = '/path/to/save/file/' + upload_file.filename
        upload_file.save(save_path)
        return f'File {upload_file.filename} is uploaded successfully.'
    else:
        return 'No file uploaded.'

@route('/download/<filename>')
def download(filename):
    return static_file(filename, root='/path/to/download/file', download=filename)

if __name__ == '__main__':
    run(host='localhost', port=8000)

在运行应用程序之前,请确保将/path/to/save/file/path/to/download/file替换为您自己的目录路径。

现在,您可以通过发送POST请求到/upload来上传文件,或通过访问/download/<filename>来下载文件。