2016-07-28 7 views
0

ich ein Bild auf Server mit Form filedata hochgeladen:Wie wird das hochgeladene Bild in der asp.net-Anwendung angezeigt?

[Route("upload")] 
    [HttpPost] 
    public async Task<HttpResponseMessage> Upload() 
    { 
     try 
     { 
      if (!Request.Content.IsMimeMultipartContent()) { 
       Request.CreateResponse(HttpStatusCode.UnsupportedMediaType); 
      } 

      var provider = GetMultipartProvider(); 

      var result = await Request.Content.ReadAsMultipartAsync(provider); 

      //Get Album name from Form 
      var titleOfAlbum = GetTitleOfAlbum(provider); 
      //get path to file 
      var pathToCoverDecoded = result.FileData.First().LocalFileName; 
      //Encodeing to base 64 path 
      var bytes = Encoding.UTF8.GetBytes(pathToCoverDecoded); 
      var base64 = Convert.ToBase64String(bytes); 

      Album al = new Album(); 
      al.Title = titleOfAlbum; 
      al.PathToCover = base64; 
      db.Albums.Add(al); 
      db.SaveChanges(); 

      return new HttpResponseMessage(HttpStatusCode.OK); 


     } 
     catch (System.Exception e) 
     { 
      return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e); 
     } 
    } 

    private string GetDesereleazedFileName(MultipartFileData fileData) 
    { 
     var fileName = GetFileName(fileData); 
     return JsonConvert.DeserializeObject(fileName).ToString(); 
    } 

    private string GetFileName(MultipartFileData fileData) 
    { 
     return fileData.Headers.ContentDisposition.FileName; 
    } 

    private MultipartFormDataStreamProvider GetMultipartProvider() 
    { 
     var uploadFolder = HttpContext.Current.Server.MapPath("~/Files"); 
     if (Directory.Exists(uploadFolder) == false) 
     { 
      Directory.CreateDirectory(uploadFolder); 
     } 

     return new MultipartFormDataStreamProvider(uploadFolder); 
    } 

    private string GetTitleOfAlbum(MultipartFormDataStreamProvider provider) 
    { 
     var titleOfAlbum = ""; 
     foreach(var key in provider.FormData.GetValues(0)) 
     { 
      titleOfAlbum = key; 
     } 

     return titleOfAlbum; 
    } 


} 

Pfad wie folgt aussieht:

„C: \ Benutzer \ Oops \ Dokumente \ Visual Studio 2015 \ Projects \ WebApplication1 \ ForMyCustomers \ WebApplication1 \ Files \ BodyPart_b40d80c5-47dc-41db-8e35-9d39d4e27939"

ich von Filedata bekommen Pfad: enter image description here

und konvertieren Sie es in base64, aber es zeigt nicht auf Seite Ich habe Datei nicht gefunden Fehler. Wie kann ich es lösen? Wenn die URL falsch ist, wie bekomme ich die richtige?

Antwort

1

Sie können den physischen Pfad (den Sie verwendet haben) nicht im Web verwenden. Der physische Pfad wie "C: \ something" ist der Pfad, der nur von Ihrem Betriebssystem verwendet werden kann.

Die URL ist jedoch der Pfad, den Sie benötigen und zu verwenden und zu tun, müssen Sie Ihre Dateien irgendwo, die von Ihrem Host (IIS) lesbar ist.

Sie schreiben Ihre Dateien bereits in "~/Files". Sie müssen nur den Dateinamen am Ende hinzufügen.

var url= "~/Files/"+filename; 

müssen Sie den Dateinamen speichern, wenn Sie Ihre Datei so hochladen, wenn Sie Daten aus DB holen wollen, holen Sie den Dateinamen aus DB und erstellen Sie die URL, die verwendet wird.

Verwandte Themen