2016-03-16 144 views
1

我正在使用Dropzone.js上傳一個Excel文件,其中的內容然後被導入到我的數據庫中的表中。

我目前在我的c#中有一些方法,它檢查正在上傳的文件,以確保它是有效的(檢查標題行)並且可以導入到數據庫。

驗證工作正常,理論上DropZone.js也一樣。但是,無論文件是否通過驗證並導入,DropZone將始終顯示「勾號/檢查」標記 - 以通知用戶該操作已成功完成。DropZone.js確定何時成功上傳

這裏是我的懸浮窗:

Dropzone.options.forecastDropzone = { 
    init: function() { 
     thisDropzone = this; 
     this.on("success", function (file, Message) { 
      console.log(Message.Message) 
      toastr.info(Message.Message, { 
       timeOut: 0, tapToDismiss: true, preventDuplicates: true 
      }); 
     }); 
    }, 
}; 

HTML:

<form action="/Power/Upload" class="dropzone" id="forecastDropzone"></form> 

和 '上傳' 方法,該方法被調用:

[HttpPost] 
    public ActionResult Upload() 
    { 
     string filename = ""; 
     string path = ""; 
     try 
     { 
      foreach (string fileName in Request.Files) 
      { 
       HttpPostedFileBase file = Request.Files[fileName]; 
       path = AppDomain.CurrentDomain.BaseDirectory + "Uploads/"; 
       filename = Path.GetFileName(Request.Files[fileName].FileName); 
       Request.Files[fileName].SaveAs(Path.Combine(path, filename)); 
       ValidateExcel(path, filename); 
      } 
     }    
     catch 
     { 
      isSavedSuccessfully = false; 
     } 

     return Json(isSavedSuccessfully == true ? new { Message = "Successfully Saved!" } : new { Message = "Error in saving file" }); 

    } 

因此上傳方法返回一個JSON對象。我希望DropZone根據JSON的值確定保存/導入是否成功。這可能嗎?
非常感謝

+1

建議:當上傳失敗時,讓您的服務器返回除成功HTTP 200響應之外的其他內容。如果Dropzone收到來自服務器的4xx或5xx響應,它將把上傳視爲失敗。 – jszobody

+0

@jszobody這工作完美!如果驗證失敗,現在返回500狀態。非常感謝! – MalvEarp

+0

很高興幫助!我繼續發佈並將其作爲答案發布,以便您可以接受。 – jszobody

回答

2

而不是試圖解析JSON響應和處理錯誤客戶端,我會讓你的服務器負責這一點。

具體而言:當上傳失敗時,讓服務器返回除成功響應HTTP 200之外的其他內容。如果收到來自服務器的4xx5xx響應,DropZone會將上傳視爲失敗。