2016-07-28 79 views
0

我使用形式FILEDATA上傳圖像到服務器:如何在asp.net應用程序中顯示上傳的圖像?

[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; 
    } 


} 

路徑是這樣的:

「C:\用戶\哎呀\文檔\ Visual Studio的2015年\項目\ WebApplication1 \ ForMyCustomers \ WebApplication1 \文件\ BodyPart_b40d80c5-47dc-41分貝-8e35-9d39d4e27939"

我正從的FileData路徑: enter image description here

並將其轉換爲base64,但它不顯示在頁面 我有文件未找到錯誤。 我該如何解決它?如果URL錯誤,我怎麼才能得到正確的?

回答

1

您無法在網絡上使用物理路徑(您使用的路徑)。物理路徑如「C:\ something」是隻能由您的操作系統使用的路徑。

但是,該URL是您需要並使用的路徑,因此您需要將文件放置在主機(IIS)可讀的某個位置。

您已經將文件寫入「〜/ Files」中。所以你只需要在最後添加文件名。

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

您需要保存的文件名,當您上傳您的文件,所以當你想從數據庫提取數據,取從數據庫文件名,並使用該創建URL。

相關問題