给我一个大文件上传的代码
时间: 2023-09-17 12:05:54 浏览: 88
### 回答1:
当您需要实现大文件上传时,最好使用分片上传的方式,以避免上传过程中出现错误导致整个文件上传失败。以下是使用Python实现分片上传的代码示例:
```python
import os
import requests
def upload_large_file(file_path, endpoint, chunk_size=1024*1024):
"""
上传大文件
:param file_path: 文件路径
:param endpoint: 上传接口地址
:param chunk_size: 分片大小,默认为1M
"""
file_name = os.path.basename(file_path)
file_size = os.path.getsize(file_path)
headers = {'Content-Type': 'application/octet-stream', 'filename': file_name, 'filesize': str(file_size)}
with open(file_path, 'rb') as f:
index = 0
while True:
data = f.read(chunk_size)
if not data:
break
headers['index'] = str(index)
headers['total'] = str((file_size - 1) // chunk_size + 1)
response = requests.post(endpoint, data=data, headers=headers)
if response.status_code != 200:
raise Exception('Upload failed with status code %d: %s' % (response.status_code, response.content))
index += 1
```
该函数使用requests库实现文件上传,首先获取文件的基本信息(文件名和文件大小),然后每次读取指定大小的数据进行上传,上传时需要带上请求头部信息(包括分片序号、总分片数、文件名和文件大小),最后通过HTTP响应状态码来判断上传是否成功。当然,上传接口的具体实现需要与该代码相应调整,以保证功能的正确性和可靠性。
### 回答2:
以下是一个使用Python编写的大文件上传的代码示例:
```python
import requests
def upload_large_file(file_path, chunk_size=1024*1024):
url = "http://example.com/upload" # 替换为实际上传路径
headers = {"Content-Disposition": "attachment; filename={}".format(file_name)}
with open(file_path, 'rb') as file:
total_size = os.path.getsize(file_path)
uploaded_size = 0
while uploaded_size < total_size:
chunk = file.read(chunk_size)
current_size = len(chunk)
files = {"file": (file_name, chunk)}
response = requests.post(url, headers=headers, files=files)
if response.status_code != 200:
print("上传失败")
return
uploaded_size += current_size
percentage = (uploaded_size / total_size) * 100
print("已上传:{}%".format(percentage))
print("上传完成")
file_path = "path/to/large_file.txt" # 替换为实际文件路径
file_name = os.path.basename(file_path)
upload_large_file(file_path)
```
以上代码使用requests库实现文件的分块上传。我们首先指定要上传的文件路径(`file_path`),然后根据需要将文件分成较小的块(`chunk_size`)。通过计算文件总大小和已上传大小,我们可以在循环中读取并上传每个块。在每次循环迭代中,我们通过设置Content-Disposition标头,将当前块作为文件附件上传到目标URL。如果上传期间发生错误或返回状态码不为200,则上传失败。最后,我们打印上传的百分比以及上传完成的消息。
请注意,上述代码主要用于示范,实际使用时需要根据实际情况进行适当的修改,例如替换URL、设置代理、处理异常等。此外,还需要确保目标服务器正确处理上传的文件,并根据需要对上传数据进行验证和验证。
### 回答3:
以下是一个用Python编写的大文件上传代码的示例:
```python
import requests
def upload_large_file(file_path, chunk_size=1024*1024):
url = 'http://example.com/upload' # 替换为你的上传接口地址
with open(file_path, 'rb') as file:
while True:
data = file.read(chunk_size) # 分块读取文件
if not data:
break # 文件读取完毕,退出循环
response = requests.post(url, data=data) # 发送分块数据到服务器
if response.status_code != 200:
# 处理上传失败的逻辑
print('上传失败')
return
# 处理上传成功的逻辑
print('上传成功')
# 调用示例
upload_large_file('path/to/large_file.zip')
```
该代码使用了requests库来发送POST请求,你需要将`url`变量替换为你的上传接口地址。`upload_large_file`函数接受一个文件路径作为参数,并将文件分块读取,每次读取`chunk_size`大小的数据,然后发送到服务器。如果上传成功,打印"上传成功";如果上传失败,打印"上传失败"。
你可以根据实际需要调整`chunk_size`的大小,较大的`chunk_size`可提高上传速度,但可能会导致内存占用较高。
阅读全文