2010-01-04 4 views
5

Estoy usando la etiqueta <input type="file" /> para subir un archivo al servidor. ¿Cómo accedo al archivo en el servidor y lo almacena en el servidor? (El archivo es un archivo de imagen) código del lado delAcceso al archivo de tipo de entrada en el servidor en asp.net

El cliente es:

<form id="form1" action="PhotoStore.aspx" enctype="multipart/form-data"> 
    <div> 
    <input type="file" id="file" onchange="preview(this)" /> 
    <input type="submit" /> 
    </div> 
</form> 

Photostore.aspx.cs tiene

protected void Page_Load(object sender, EventArgs e) 
     { 
      int index = 1; 
      foreach (HttpPostedFile postedFile in Request.Files) 
      { 
       int contentLength = postedFile.ContentLength; 
       string contentType = postedFile.ContentType; 
       string fileName = postedFile.FileName; 

       postedFile.SaveAs(@"c:\test\file" + index + ".tmp"); 

       index++; 
      } 

     } 

Traté de subir un archivo JPG. No se puede ver un archivo guardado. ¿Qué está pasando mal?

+0

winforms or mvc u otro? –

Respuesta

0

Mire en el asp: control FileUpload proporcionado por ASP.NET.

6

Usted tendrá que añadir id y runat="server" atributos como esto:

<input type="file" id="MyFileUpload" runat="server" /> 

A continuación, en el lado del servidor, tendrá acceso a la propiedad del control de PostedFile, que le dará ContentLength, ContentType, FileName, InputStream propiedades y un método etc SaveAs:

int contentLength = MyFileUpload.PostedFile.ContentLength; 
string contentType = MyFileUpload.PostedFile.ContentType; 
string fileName = MyFileUpload.PostedFile.FileName; 

MyFileUpload.PostedFile.Save(@"c:\test.tmp"); 

Como alternativa, se puede usar Request.Files WH ich le da una colección de todos los archivos subidos:

int index = 1; 
foreach (HttpPostedFile postedFile in Request.Files) 
{ 
    int contentLength = postedFile.ContentLength; 
    string contentType = postedFile.ContentType; 
    string fileName = postedFile.FileName; 

    postedFile.Save(@"c:\test" + index + ".tmp"); 

    index++; 
} 
+0

¿por qué runat = "server"? No quiero un control de servidor. ¿Funcionará esto sin un control de servidor? – Ajay

+3

Si no desea utilizar un control de servidor, puede usar 'Request.Files', que le proporcionará una colección que contiene un objeto' HttpPostedFile' por cada archivo cargado. – LukeH

+0

Muchas gracias @LukeH ... Me sacaste de problemas ... :) –

0

Si no desea utilizar el control FileUpload en la caja de herramientas, dé a su entrada un identificador a continuación, utilizar la forma [id] para acceder al campo de entrada y echarlo a los HtmlInputFile.

ejemplo aquí: http://www.codeproject.com/KB/aspnet/fileupload.aspx

0

Si le das la entrada-tag un ID y agrega el = "servidor" runat atribuir a continuación, se puede acceder a ella fácilmente.
primer cambio de su etiqueta de entrada: <input type="file" id="FileUpload" runat="server" />
A continuación, añada lo siguiente a su método Page_Load:

if (FileUpload.PostedFile != null) 
{ 
    FileUpload.PostedFile.SaveAs(@"some path here"); 
} 

Esto escribirá el archivo a una carpeta de su elección. Puede acceder al objeto de archivo publicado si necesita determinar el tipo de archivo o el nombre del archivo original.

2

creo que es necesaria la etiqueta de nombre en el archivo de entrada:

<input type="file" name="file" /> 

Sin esto, no reciben nada a cambio.


Otros problemas que tuve que podrían ser específicos de mi máquina:

me sale un error

Unable to cast object of type 'System.String' to type 'System.Web.HttpPostedFile'. 

en la línea de

foreach (HttpPostedFile postedFile in Request.Files) 

así que mis últimas miradas de código de esta manera:

for (var i = 0; i < Request.Files.Count; i++) 
{ 
    var postedFile = Request.Files[i]; 

    // do something with file here 
} 
Cuestiones relacionadas