2012-03-01 84 views
0

我正在使用Uploadify在ASP.NET MVC應用程序中上傳多個文件。在控制器動作中,我需要檢查一個上傳的文件是否爲zip文件,如果是,我需要檢查其內容。對於zip功能,我使用ICSharpCode.SharpZipLib。上傳壓縮文件錯誤

上傳壓縮文件從說我的桌面時,出現以下錯誤: 找不到文件'C:\ Program Files(x86)\ Common Files \ Microsoft Shared \ DevServer \ 10.0 \ xyz.zip'在以下代碼行上: FileStream fs = System.IO.File.OpenRead(Path.GetFullPath(fileData.FileName)); ZipFile zf = new ZipFile(fs);

我該如何克服這個錯誤?

[HttpPost] 
     public ActionResult Upload(HttpPostedFileBase fileData) 
     { 
      if (fileData != null && fileData.ContentLength > 0) 
      { 
       if (Path.GetExtension(fileData.FileName) == ".zip") 
       { 
        FileStream fs = System.IO.File.OpenRead(Path.GetFullPath(fileData.FileName)); 
        ZipFile zf = new ZipFile(fs); 

        foreach (ZipEntry zipEntry in zf) 
        { 

        } 
       } 
       else 
       { 
        var fileName = Server.MapPath("~/Content/uploads/" + Path.GetFileName(fileData.FileName)); 
        fileData.SaveAs(fileName); 
        return Json(true); 
       } 
      } 
      return Json(false); 
     } 
+0

您的桌面與服務器目錄無關 - – Aristos 2012-03-01 20:23:55

+0

是的,但是接下來如何檢查.zip文件的內容,而不是先將其上傳到服務器? – 2012-03-01 20:25:04

+0

也許爲目標位置指定完整路徑可能是一種解決方案。上述路徑實際上不是storevuser上傳文件的路徑。權限問題? – 2012-03-01 20:25:52

回答

1

HttpPostedFileBase.FileName是上傳文件的名稱,而不是存儲在服務器上的文件的位置。 HttpPostedFileBase不會將文件存儲在服務器上,只能作爲流存儲。您的選項要麼打開內存中的流(如果您的第三方實用程序允許打開流)或將文件保存到已知位置,請從該位置打開它。

0

Path.GetFullPath從當前目錄獲取完整路徑。
這與您的HttpUploadedFileBase沒有任何關係,它不在磁盤上。

您需要傳遞一個流而不是文件路徑。

0

如果你想檢查它是否是一個zip文件,你可以隨時查看返回的內容類型。

application/zip 

這可能適用於您正在嘗試做的事情。另外,只要試着看看內容類型,你可能會發現一些更具體的需求。

+0

謝謝,內容類型檢查很好找,如果它是一個zip文件或不是。但我的要求是看看裏面的壓縮文件,看看是否它包含一個特定的文件,如果有,則繼續上傳,否則不會。 – 2012-03-01 20:30:06