Ciao, il problema qui è che appena provi a leggere un qualcosa dalla response, lui deve caricare tutto il body della richiesta in memoria, cosa che molto probabilmente non vuoi fare, specialmente se devi semplicemente prendere la richiesta e scriverla da un'altra parte (file, db, ...), in questo caso ti consiglio di fare letture a buffer di qualche KB, in modo da non dovere leggere tutto in memoria, ma avere solo piccoli pezzetti che poi scrivi su file, esistono anche metodi (dal fx 4.0) che lo fanno per te, vedi:
using(var newFile = File.Create(tempPath)) {
request.InputStream.CopyTo(newFile);
}
oppure senza il CopyTo:
public void ProcessRequest(HttpContext context)
{
const int BufferSize = 4096;
HttpRequest request = context.Request;
context.Response.ContentType = "text/html";
context.Response.ContentEncoding = System.Text.Encoding.UTF8;
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
var tempFilePath = Path.GetTempFileName();
using (Stream fs = File.OpenWrite(tempFilePath));
{
byte[] buffer = new byte[BufferSize];
int read = -1;
while(read = request.InputStream.Read(buffer, 0, buffer.Length) > 0)
{
fs.Write(buffer, 0, buffer.Length);
}
}
context.Response.Write("{\"success\":true}");
context.Response.End();
}
qualche altro link:
http://blogs.msdn.com/b/rohithrajan/archive/2013/01/22/part-3-suggestions-on-implementing-large-file-upload-in-asp-net.aspx
Michael Denny | Microsoft Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.net
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic