1. 文件上传
文件上传通常通过 POST 请求完成,服务端需要从请求中接收文件数据。
基本文件上传
使用 files
参数上传文件:
1 2 3 4 5 6 7
| import requests
url = 'https://example.com/upload' files = {'file': open('example.txt', 'rb')} response = requests.post(url, files=files) print(response.status_code) print(response.text)
|
上传多个文件
通过字典传递多个文件:
1 2 3 4 5 6
| files = { 'file1': open('example1.txt', 'rb'), 'file2': open('example2.txt', 'rb') } response = requests.post('https://example.com/upload', files=files) print(response.json())
|
设置额外的表单字段
可以在上传文件的同时发送其他表单字段:
1 2 3 4
| files = {'file': open('example.txt', 'rb')} data = {'username': 'testuser', 'password': '123456'} response = requests.post('https://example.com/upload', files=files, data=data) print(response.text)
|
2. 文件下载
文件下载通常通过 GET 请求完成。
下载文件到内存
将文件内容读取到内存中:
1 2 3
| response = requests.get('https://example.com/file.txt') if response.status_code == 200: print(response.content.decode('utf-8'))
|
保存文件到本地
使用二进制模式将文件保存到本地:
1 2 3 4 5 6
| url = 'https://example.com/file.txt' response = requests.get(url) if response.status_code == 200: with open('downloaded_file.txt', 'wb') as f: f.write(response.content) print('文件已下载并保存为 downloaded_file.txt')
|
大文件下载(流模式)
下载大文件时,可以使用流模式以减少内存占用:
1 2 3 4 5 6 7
| url = 'https://example.com/largefile.zip' response = requests.get(url, stream=True) if response.status_code == 200: with open('largefile.zip', 'wb') as f: for chunk in response.iter_content(chunk_size=1024): f.write(chunk) print('大文件已下载并保存为 largefile.zip')
|
3. 文件上传与下载错误处理
处理上传错误
常见的错误场景包括文件未找到或服务端返回错误:
1 2 3 4 5 6 7 8
| try: files = {'file': open('non_existent_file.txt', 'rb')} response = requests.post('https://example.com/upload', files=files) response.raise_for_status() except FileNotFoundError: print('文件未找到!') except requests.RequestException as e: print(f'上传失败:{e}')
|
处理下载错误
常见的下载错误包括连接超时和文件不存在:
1 2 3 4 5 6 7 8 9
| try: response = requests.get('https://example.com/nonexistentfile.txt', timeout=10) response.raise_for_status() with open('file.txt', 'wb') as f: f.write(response.content) except requests.Timeout: print('下载超时!') except requests.RequestException as e: print(f'下载失败:{e}')
|