2016-11-11 124 views
0

我有一些數據要保存到數據庫中。 我已經創建了一個web api post方法來保存數據。以下是我的帖子方法:Web API上傳文件

[Route("PostRequirementTypeProcessing")] 
    public IEnumerable<NPAAddRequirementTypeProcessing> PostRequirementTypeProcessing(mdlAddAddRequirementTypeProcessing requTypeProcess) 
    { 
     mdlAddAddRequirementTypeProcessing rTyeProcessing = new mdlAddAddRequirementTypeProcessing(); 

     rTyeProcessing.szDescription = requTypeProcess.szDescription; 
     rTyeProcessing.iRequirementTypeId = requTypeProcess.iRequirementTypeId; 
     rTyeProcessing.szRequirementNumber = requTypeProcess.szRequirementNumber; 
     rTyeProcessing.szRequirementIssuer = requTypeProcess.szRequirementIssuer; 
     rTyeProcessing.szOrganization = requTypeProcess.szOrganization; 
     rTyeProcessing.dIssuedate = requTypeProcess.dIssuedate; 
     rTyeProcessing.dExpirydate = requTypeProcess.dExpirydate; 
     rTyeProcessing.szSignedBy = requTypeProcess.szSignedBy; 
     rTyeProcessing.szAttachedDocumentNo = requTypeProcess.szAttachedDocumentNo; 
     if (String.IsNullOrEmpty(rTyeProcessing.szAttachedDocumentNo)) 
     { 

     } 
     else 
     { 
      UploadFile(); 
     } 
     rTyeProcessing.szSubject = requTypeProcess.szSubject; 
     rTyeProcessing.iApplicationDetailsId = requTypeProcess.iApplicationDetailsId; 
     rTyeProcessing.iEmpId = requTypeProcess.iEmpId; 

     NPAEntities context = new NPAEntities(); 
     Log.Debug("PostRequirementTypeProcessing Request traced"); 

     var newRTP = context.NPAAddRequirementTypeProcessing(requTypeProcess.szDescription, requTypeProcess.iRequirementTypeId, 
            requTypeProcess.szRequirementNumber, requTypeProcess.szRequirementIssuer, requTypeProcess.szOrganization, 
            requTypeProcess.dIssuedate, requTypeProcess.dExpirydate, requTypeProcess.szSignedBy, 
            requTypeProcess.szAttachedDocumentNo, requTypeProcess.szSubject, requTypeProcess.iApplicationDetailsId, 
            requTypeProcess.iEmpId); 

     return newRTP.ToList(); 
    } 

有一個名爲「szAttachedDocumentNo」,這是多數民衆贊成被保存在數據庫和文檔領域。

保存所有數據後,我希望將'szAttachedDocumentNo'的物理文件保存在服務器上。所以,我創建了一個名爲一個「UploadFile」的方法如下:

[HttpPost] 
    public void UploadFile() 
    { 
     if (HttpContext.Current.Request.Files.AllKeys.Any()) 
     { 
      // Get the uploaded file from the Files collection 
      var httpPostedFile = HttpContext.Current.Request.Files["UploadedFile"]; 

      if (httpPostedFile != null) 
      { 
       // Validate the uploaded image(optional) 
       string folderPath = HttpContext.Current.Server.MapPath("~/UploadedFiles"); 
       //string folderPath1 = Convert.ToString(ConfigurationManager.AppSettings["DocPath"]); 

       //Directory not exists then create new directory 
       if (!Directory.Exists(folderPath)) 
       { 
        Directory.CreateDirectory(folderPath); 
       } 

       // Get the complete file path 
       var fileSavePath = Path.Combine(folderPath, httpPostedFile.FileName); 

       // Save the uploaded file to "UploadedFiles" folder 
       httpPostedFile.SaveAs(fileSavePath); 
      } 
     } 
    } 

運行項目之前,我debbugged POST方法,所以當它涉及到一個「UploadFile」行,就帶我到它的方法。 從文件行中,它跳過了剩餘的行並進入最後一行;什麼意思它沒有看到任何文件。 我能夠將所有內容保存到數據庫,只是我沒有在指定位置看到物理文件。 任何幫助將不勝感激。

問候,

Somad

回答

0

確保 「內容類型」 的請求: 「多部分/格式數據」 被設置

  [HttpPost()] 
      public async Task<IHttpActionResult> UploadFile() 
      { 
       if (!Request.Content.IsMimeMultipartContent()) 
        throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); 

       try 
       { 
        MultipartMemoryStreamProvider provider = new MultipartMemoryStreamProvider(); 

        await Request.Content.ReadAsMultipartAsync(provider); 

        if (provider.Contents != null && provider.Contents.Count == 0) 
        { 
         return BadRequest("No files provided."); 
        } 

        foreach (HttpContent file in provider.Contents) 
        { 
         string filename = file.Headers.ContentDisposition.FileName.Trim('\"'); 

         byte[] buffer = await file.ReadAsByteArrayAsync(); 

         using (MemoryStream stream = new MemoryStream(buffer)) 
         { 
          // save the file whereever you want 

         } 
        } 

        return Ok("files Uploded"); 
       } 
       catch (Exception ex) 
       { 
        return InternalServerError(ex); 
       } 
      }