Как получить большой файл (>2 ГБ) в ASP .Net WebAPI без MIME-типа?
Есть ли способ реализовать.net Web API для получения файла lrage(>2 ГБ) с использованием потока без буфера без типа mime multipart/form-data?
Я пытаюсь сделать это с помощью приведенного ниже кода, но он не читает поток полностью. Я пытаюсь загрузить файл размером 100 МБ, но он записывает только 10 МБ в "c:\sampl.zip" и выходит. что пошло не так в коде ниже?
public async Task<HttpResponseMessage> FileReceive1r(string id)
{
var content = new StreamContent(HttpContext.Current.Request.GetBufferlessInputStream(true));
Stream stream = HttpContext.Current.Request.GetBufferlessInputStream(true);
StreamReader rdr = new StreamReader(stream);
while(!rdr.EndOfStream)
{
//FileStream fs = new FileStream(@"c:\sampl.zip", FileMode.OpenOrCreate);
StreamWriter wrtr = new StreamWriter(new FileStream(@"c:\sampl.zip", FileMode.OpenOrCreate));
wrtr.Write(rdr.ReadToEnd());
wrtr.Close();
}
rdr.Close();
return await Task.FromResult(new HttpResponseMessage(HttpStatusCode.Created));
}
1 ответ
Вы можете использовать следующий код для загрузки файла в чанк
public HttpResponseMessage Get()
{
string filename = @"c:\sampl.zip";
var response = this.Request.CreateResponse();
response.Content = new PushStreamContent(async (Stream outputStream, HttpContent content, TransportContext context) =>
{
try
{
var buffer = new byte[65536];
using (var video = File.Open(filename, FileMode.Open, FileAccess.Read))
{
var length = (int)video.Length;
var bytesRead = 1;
while (length > 0 && bytesRead > 0)
{
bytesRead = video.Read(buffer, 0, Math.Min(length, buffer.Length));
await outputStream.WriteAsync(buffer, 0, bytesRead);
length -= bytesRead;
}
}
}
finally
{
outputStream.Close();
}
});
return response;
}