2012-11-28 82 views
0

我正在研究asp.net mvc web api。我試圖通過POST請求喜歡上傳圖像,如何在asp.net web api上成功上傳後獲取發佈的文件名

<form action="/api/mypictures/12" method="post" enctype="multipart/form-data"> 
     <label for="somefile">File</label> 
     <input name="somefile" type="file" /> 
     <input type="submit" value="Submit" /> 
    </form> 

我havebeen遵循以下程序,

[HttpPost] 
     public HttpResponseMessage AddImage(HttpRequestMessage request, int id) 
     { 
      try 
      { 
       if (!request.Content.IsMimeMultipartContent("form-data")) 
       { 
        return request.CreateErrorResponse(HttpStatusCode.UnsupportedMediaType, new HttpError() { { "status", "failed" }, { "message", "Invalid file format" } }); 
       } 
       else 
       { 
        string PATH = HttpContext.Current.Server.MapPath("~/App_Data/"); 
        var streamProvider = new CustomMultipartFormDataStreamProvider(PATH); 
        var task = Request.Content.ReadAsMultipartAsync(streamProvider).ContinueWith(
         t => 
         { 
          if (t.IsFaulted || t.IsCanceled) 
           throw new HttpResponseException(HttpStatusCode.InternalServerError); 
         } 
        ); 
        Photo photo = new Photo(); 
        photo.Id = id; 
        **photo.Image = "Image that uploaded recently";** 
        photo.IsUserAllowed = true; 
        if (barrepository.AddImage(photo) == 1) 
        { 
         return request.CreateErrorResponse(HttpStatusCode.OK, new HttpError() { { "status", "success" }, { "message", "file uploaded successfully" } }); 
        } 
        else 
        { 
         return request.CreateErrorResponse(HttpStatusCode.OK, new HttpError() { { "status", "success" }, { "message", "unable to store the image into database" } }); 
        } 
       } 
      } 
      catch(Exception ex) 
      { 
       return request.CreateErrorResponse(HttpStatusCode.InternalServerError, new HttpError() { { "status", "failed" }, { "message", ex.Message } }); 
      } 
     } 

和我CustomMultipartFormDataStreamProvider類是喜歡,

public class CustomMultipartFormDataStreamProvider : MultipartFormDataStreamProvider 
    { 
     public CustomMultipartFormDataStreamProvider(string path) 
      : base(path) 
     { } 

     public override string GetLocalFileName(System.Net.Http.Headers.HttpContentHeaders headers) 
     { 
      var name = !string.IsNullOrWhiteSpace(headers.ContentDisposition.FileName) ? DateTime.Now.ToString("MM-dd-yyyy-hh-mm-ss")+"_"+headers.ContentDisposition.FileName : "NoName"; 
      return name.Replace("\"", string.Empty); 
     } 
    } 

和上述步驟很好地將文件保存到提到的文件夾中。但是我需要在上傳成功後將上傳的文件名存儲到我的數據庫表中。我怎麼能成功上傳後獲得張貼文件的文件名。請指導我。

回答

0

你可以得到的文件名象下面這樣:

var task = Request.Content.ReadAsMultipartAsync(streamProvider).ContinueWith(
        t => 
        { 
         if (t.IsFaulted || t.IsCanceled) 
          throw new HttpResponseException(HttpStatusCode.InternalServerError); 


      CustomMultipartFormDataStreamProvider resultProvider = t.Result; 
      string fileName = t.FileData.First().LocalFileName; 
        } 
       ); 
+0

當我做t.FileData,不是從智能感知顯示的FileData ... – guiomie

相關問題