2011-10-17 31 views
6

Estoy tratando de encontrar la forma de usar los nuevos asinters asinnc asp.net 4.5 así como Request.GetBufferlessInputStream para escribir una carga de imágenes en el disco. Este código se ejecuta y escribe un archivo, pero la imagen está dañada y no estoy seguro de por qué. Aquí está el código que estoy usando.NET 4.5 HttpTaskAsyncHandler cargar un archivo

public class UploadHandler : HttpTaskAsyncHandler 
{ 
    public override Task ProcessRequestAsync(HttpContext context) 
    { 
     // Gets a Stream object that can be used to read the 
     // incoming HTTP entity body, optionally disabling the 
     // request-length limit that is set in the MaxRequestLength property. 

     // This method provides an alternative to using the 
     // InputStream property. The InputStream property waits until the 
     // whole request has been received before it returns a Stream object. 
     // In contrast, the GetBufferlessInputStream method returns 
     // the Stream object immediately. 
     // You can use the method to begin processing the 
     // entity body before the complete contents of the 
     // body have been received. 
     // The entity body (or as much of it as you request and has 
     // been received) is returned only when you use the object that 
     // is returned by this method to read the stream, by calling 
     // methods such as the Read method. You use parameters of the 
     // Read method to specify how much of the entity body to read. 

     // This method can be useful if the request is uploading a 
     // large file and you want to begin accessing the file contents 
     // before the upload is finished. 
     // However, you should only use this method for scenarios where 
     // you want to take over all processing of the entity body. 
     // This means that you cannot use this method from an .aspx page, 
     // because by the time an .aspx page runs, the entity body 
     // has already been read. 

     using (Stream input = context.Request.GetBufferlessInputStream(true)) 
     using (var file = new FileStream("C:\\myfile.jpg", FileMode.Create, 
      FileAccess.Write, FileShare.Write)) 
     { 
      input.CopyTo(file); 
     } 

     context.Response.ContentType = "text/plain"; 
     return context.Response.Output.WriteAsync("Done"); 
    } 
} 
+1

¿Cómo es corrupto? – Amy

+0

Además de lo anterior, pruébelo con un archivo de texto grande. de esa manera, el resultado será accesible, pero puede ver lo que está sucediendo con el archivo. – stevenrcfox

+0

Estoy pensando que tendré que analizar la Solicitud real y buscar los datos de formulario/multiparte? – superlogical

Respuesta

0

no probando realmente su código Noté una cosa. ¿No debería su Response.ContentType = image/gif también debería la transmisión ser un BinaryStream en lugar de una transmisión normal ya que es una Imagen con la que está trabajando ...?

+0

Response.ContentType debe ser text/plain porque estoy escribiendo asincrónicamente escribiendo "Done" como la respuesta al navegador. – superlogical

Cuestiones relacionadas