using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
public class SliceUpload
{
private readonly HttpClient _httpClient;
public SliceUpload(HttpClient httpClient)
{
_httpClient = httpClient;
}
public async Task UploadFileSlicesAsync(string filePath, string uploadUrl, int sliceSize)
{
using (FileStream fileStream = File.OpenRead(filePath))
{
long fileLength = fileStream.Length;
byte[] buffer = new byte[sliceSize];
int read;
int sliceStart = 0;
while (sliceStart < fileLength)
{
read = await fileStream.ReadAsync(buffer, 0, sliceSize);
using (MemoryStream sliceStream = new MemoryStream(buffer, 0, read))
{
using (ByteArrayContent content = new ByteArrayContent(sliceStream.ToArray()))
{
// 这里可以添加必要的HTTP头信息,比如切片索引、总切片数等
var response = await _httpClient.PostAsync(uploadUrl, content);
response.EnsureSuccessStatusCode();
}
}
sliceStart += read;
}
}
}
}
// 使用方法
var httpClient = new HttpClient();
var sliceUpload = new SliceUpload(httpClient);
await sliceUpload.UploadFileSlicesAsync("path/to/your/large/file",
"http://your.upload.server/upload", 1024 * 1024); // 切片大小为1MB
网友评论