【发布时间】:2019-07-13 08:51:36
【问题描述】:
我有一个大文件,我想将它发送到 Web API,Web API 将它发送到亚马逊。由于文件很大,我想将文件分块发送到亚马逊。 因此,如果我有 1 GB 的文件,我希望我的 API 以 20 MB 的块接收文件,以便我可以将其发送到 Amazon,然后再次接收 20 MB 的块。这怎么可能。以下是我的尝试。
public async Task<bool> Upload()
{
var fileuploadPath = ConfigurationManager.AppSettings["FileUploadLocation"];
var provider = new MultipartFormDataStreamProvider(fileuploadPath);
var content = new StreamContent(HttpContext.Current.Request.GetBufferlessInputStream(true));
// Now code below writes to a folder, but I want to make sure I read it as soon as I receive some chunk
await content.ReadAsMultipartAsync(provider);
return true;
}
伪代码:
While (await content.ReadAsMultipartAsync(provider) == 20 MB chunk)
{
//Do something
// Then again do something with rest of chunk and so on.
}
文件最大为 1 GB。
到目前为止,这行代码正在发送整个文件:
await content.ReadAsMultipartAsync(provider);
我在这里迷路了,请帮助我。我想要的只是接收小块文件并处理它。
P.S:我正在从 Postman 发送文件作为 MultiPart/Form-Data 进行测试。
第 2 次尝试:
var filesReadToProvider = await Request.Content.ReadAsMultipartAsync();
foreach (var content in filesReadToProvider.Contents)
{
var stream = await content.ReadAsStreamAsync();
using (StreamReader sr = new StreamReader(stream))
{
string line = "";
while ((line = sr.ReadLine()) != null)
{
using (MemoryStream outputStream = new MemoryStream())
using (StreamWriter sw = new StreamWriter(outputStream))
{
sw.WriteLine(line);
sw.Flush();
// Do Something
}
}
}
}
【问题讨论】:
-
ReadAsMultipartAsync不适用于分块编码请求。 -
您能否指导我如何进行。谢谢。我想要的只是继续接收一些块中的文件并继续做我想做的任何事情,然后再获得另一个块。
-
您必须使用自己的流式阅读器来做到这一点。
-
由于我是新手,我无法正确关注您,但我有另一个代码可以将所有内容加载到内存流中。您能否在我的问题编辑中检查
Attempt 2。
标签: c# asp.net .net asp.net-web-api asp.net-web-api2