You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何搭建可接收curl传输文件的Python服务器?

实现思路与代码示例

首先明确:pycurl是Python的curl客户端库,主要用于发送HTTP请求,做服务器端接收文件并不合适,推荐用以下两种更直接的方案:

服务器端实现方向

1. 原生http.server实现(无需额外依赖)

用Python标准库搭建极简服务器,自定义请求处理器处理POST请求并保存文件:

from http.server import BaseHTTPRequestHandler, HTTPServer

class FileUploadHandler(BaseHTTPRequestHandler):
    def do_POST(self):
        # 读取请求中的文件内容
        content_len = int(self.headers.get('Content-Length', 0))
        file_data = self.rfile.read(content_len)
        
        # 保存文件到本地(可自定义路径/文件名)
        with open('./received_file', 'wb') as f:
            f.write(file_data)
        
        # 返回成功响应
        self.send_response(200)
        self.end_headers()
        self.wfile.write(b'File saved')

def run_server(port=8000):
    server = HTTPServer(('', port), FileUploadHandler)
    print(f'Server listening on port {port}')
    try:
        server.serve_forever()
    except KeyboardInterrupt:
        server.shutdown()
        print('Server stopped')

if __name__ == '__main__':
    run_server()

2. Flask框架实现(灵活易扩展)

如果需要后续添加权限验证、多文件处理等功能,Flask更适合。先安装依赖:pip install flask

from flask import Flask, request

app = Flask(__name__)

@app.route('/upload', methods=['POST'])
def handle_upload():
    # 支持两种上传格式
    if 'file' in request.files:
        # 处理multipart/form-data格式(带文件名)
        uploaded_file = request.files['file']
        if uploaded_file.filename:
            uploaded_file.save(f'./{uploaded_file.filename}')
            return 'File uploaded', 200
    else:
        # 处理原始二进制格式
        raw_data = request.get_data()
        with open('./received_file', 'wb') as f:
            f.write(raw_data)
        return 'File saved', 200

if __name__ == '__main__':
    # 允许外部设备访问,设置host为0.0.0.0
    app.run(host='0.0.0.0', port=8000)

客户端curl命令

根据服务器实现选择对应命令:

  • 上传原始二进制文件(适配两种服务器):
curl -X POST --data-binary @/本地文件路径 http://服务器IP:8000
  • 以表单格式上传(适配Flask的/upload接口):
curl -X POST -F "file=@/本地文件路径" http://服务器IP:8000/upload

关键注意点

  • 确保服务器防火墙开放目标端口(如8000),两台设备处于同一网络或服务器有公网IP
  • 大文件传输建议分块读取(原生server可修改rfile.read为循环分块读取),避免内存溢出

内容的提问来源于stack exchange,提问作者user18422940

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 10:25:22