2011-04-28 30 views
7

Tengo una sección de administración de sitio web en la que estoy ocupado trabajando, que tiene 4 controles FileUpload para fines específicos. Necesito saber que, cuando uso el método Server.MapPath() dentro de los métodos SaveAs() del control FileUpload, ¿se podrá usar en el servidor web una vez que haya cargado el sitio web? Por lo que yo sé, SaveAs() requiere una ruta absoluta, es por eso que hacen corresponder un camino con Server.MapPath()Carga de archivos usando Server.MapPath() y FileUpload.SaveAs()

if (fuLogo.HasFile) //My FileUpload Control : Checking if a file has been allocated to the control 
     { 
      int counter = 0; //This counter Is used to ensure that no files are overwritten. 
      string[] fileBreak = fuLogo.FileName.Split(new char[] { '.' }); 
      logo = Server.MapPath("../Images/Logos/" + fileBreak[0] + counter.ToString()+ "." + fileBreak[1]); // This is the part Im wondering about. Will this still function the way it should on the webserver after upload? 
      if (fileBreak[1].ToUpper() == "GIF" || fileBreak[1].ToUpper() == "PNG") 
      { 
       while (System.IO.File.Exists(logo)) 
       { 
        counter++; //Here the counter is put into action 
        logo = Server.MapPath("../Images/Logos/" + fileBreak[0] + counter.ToString() + "." + fileBreak[1]); 
       } 
      } 
      else 
      { 
       cvValidation.ErrorMessage = "This site does not support any other image format than .Png or .Gif . Please save your image in one of these file formats then try again."; 
       cvValidation.IsValid = false; 
      } 
      if (fuLogo.PostedFile.ContentLength > 409600) //File must be 400kb or smaller 
      { 
       cvValidation.ErrorMessage = "Please use a picture with a size less than 400 kb"; 
       cvValidation.IsValid = false; 

      } 
      else 
      { 

       if (fuLogo.HasFile && cvValidation.IsValid) 
       { 
        fuLogo.SaveAs(logo); //Save the logo if file exists and Validation didn't fail. The path for the logo was created by the Server.MapPath() method. 
       } 

      } 
     } 
     else 
     { 
      logo = "N/A"; 
     } 
+0

Ah, y Logo se declara una variable de cadena en el ámbito global – Eon

Respuesta

4
  • Si va a guardar los archivos en un directorio en el servidor web, a continuación, el Server.MapPath() será la solución adecuada .

    string dirPath = System.Web.HttpContext.Current.Server.MapPath("~") + "/Images/Logos/"+ fileBreak[0] + counter.ToString() + "." + fileBreak[1];

    Look Here

  • si va a guardar los archivos fuera el servidor web, entonces

    Usar una ruta completa, como "c: \ archivos" y asegúrese de que el proceso web tiene el permiso para escribir en esa carpeta, le sugiero que almacene la ruta en el archivo web.config en este caso.

+1

información muy útil que entregó allí, en su segundo punto. Voy a investigar cómo hacerlo rápido antes de abrir otra vena en la atención al cliente – Eon

+0

Las rutas completas se almacenan en la base de datos, y tengo la intención de cargar las imágenes en el Directorio de Imágenes/Logos. La ruta se leerá desde la base de datos y se desglosará en la ruta enraizada que se requiere para acceder a esta imagen cargada recientemente. – Eon

0

Sí debería seguir funcionando como Server.MapPath utiliza los valores relativos y devuelve la ruta física completa.

+0

El resultado que tenía para una imagen llamada prueba.png fue C:/TestSite /Images/Logos/Test0.Png (como un archivo recientemente guardado), y ese fue el resultado que estaba buscando. Solo quería saber si aún podría acceder al archivo en el servidor web (cuando se cargó en el servidor web). Obviamente, terminaría en una relación de Imágenes/Logotipos/Directorio. Justo, ¿se cargaría de forma legítima y utilizable en mi sitio web cuando intente acceder a test0.png? – Eon

3

sí, que se puede utilizar después de guardar archivo y cuando intenta recuperar ese archivo ...

Server.MapPath("~/Images/Logos/" + uploadedFileName); 
+0

por lo que server.MapPath tenía una ../Images/Logos es que tenía que volver un directorio, luego dirigirse a Imágenes/Logos. Me alegro de que funcione en el servidor web, porque leo en alguna parte que Server.MapPath() no siempre funciona como se espera una vez que se carga su página. Pero gracias de cualquier manera. – Eon

+1

intente siempre usar ~ sign, que se iniciará desde el directorio raíz. –

+0

Entonces, ¿debería cambiarlo a ~ /../ Imágenes/Logos? :? – Eon

0

Es una línea de código:

FileUpload1.PostedFile.SaveAs(Server.MapPath(" ")+"\\YourImageDirectoryOnServer\\"+FileUpload1.FileName); 
Cuestiones relacionadas