2010-06-18 75 views
13

tengo este método que no construye, él los errores con el mensaje:No se puede convertir implícitamente el tipo 'System.Web.HttpPostedFile' a 'System.Web.HttpPostedFileBase'

No se puede convertir implícitamente el tipo 'System.Web.HttpPostedFile' a 'System.Web.HttpPostedFileBase'

es realmente necesario que esto sea del tipo HttpPostedFileBase en lugar de HttpPostedFile, he tratado de boxeo y no funciona:

foreach (string inputTagName in HttpContext.Current.Request.Files) 
{ 
    HttpPostedFileBase filebase =HttpContext.Current.Request.Files[inputTagName]; 
    if (filebase.ContentLength > 0) 
    { 
     if (filebase.ContentType.Contains("image/")) 
     { 
     SaveNonAutoExtractedThumbnails(doc, filebase); 
     } 
    } 
} 

Respuesta

22

Un vistazo rápido a Reflector indica que HttpPostedFileWrapper hereda de HttpPostedFileBase y acepta una HttpPostedFile en el constructor:

foreach (string inputTagName in HttpContext.Current.Request.Files) 
{ 
    HttpPostedFileBase filebase = 
     new HttpPostedFileWrapper(HttpContext.Current.Request.Files[inputTagName]); 

    if (filebase.ContentLength > 0) 
    { 
     //... 

TheVillageIdiot nos lleva a un gran punto acerca de la mejor estructura iterativa, y funcionará para usted si usted' re scope expone la propiedad Request del contexto HTTP actual (p. ej. en un Page, pero no en Global.asax):

foreach (HttpPostedFile file in Request.Files) 
{ 
    HttpPostedFileBase filebase = new HttpPostedFileWrapper(file); 
    // .. 

Si tiene LINQ disponible, podría utilizar eso también:

var files = Request.Files.Cast<HttpPostedFile>() 
       .Select(file => new HttpPostedFileWrapper(file)) 
       .Where(file => file.ContentLength > 0 
          && file.ContentType.StartsWith("image/")); 

foreach (var file in files) 
{ 
    SaveNonAutoExtractedThumbnails(doc, file); 
} 
+0

Gracias John, exactamente lo que necesitaba – tom

+0

gran ayuda. Gracias –

3

La primera cosa que no es necesario para que sea HttpPostedFileBaseHttpPostedFile se trabaja tan bien

En segundo lugar, ContentType es MIME Content Type, debe buscar en FileName.

probar este código:

foreach (HttpPostedFile file in Request.Files) 
{ 
    if (file.ContentLength > 0) 
    { 
     if(file.ContentType.Contains("image/") //as pointed out in comment 
     { 
      //make second parameter of type HttpPostedFile type 
      //where you define method 
      SaveNonAutoExtractedThumbnail(doc,file); 
     } 
    } 
} 
Cuestiones relacionadas