2012-10-05 113 views
0

嗨,我已經創建了一個zipfile,並且我想在創建它之後上傳它。使用fileUpload1組件獲取HttpPostedFileBase?將Zip文件轉換爲HttpPostedFileBase

我有一個方法來上傳文件,但它只接受文件作爲HttpPostedFileBase

保存我的zip文件後,我會如何將其更改爲HttpPostedFileBase,以便我可以將它傳遞給我的上傳方法。

using (ZipFile zip = new ZipFile()) 
    { 
     // add this map to zip 
     zip.AddFile(tempFolderPath + PropInfo[7].TagValue, ""); 
     zip.AddFile(tempFolderPath + "data.xml", ""); 
     zip.AddFile(tempFolderPath + "dvform.dvform", ""); 
     zip.AddFile(tempFolderPath + "CS1.pdf", ""); 
     zip.AddFile(tempFolderPath + "CS2.pdf", ""); 
     zip.AddFile(tempFolderPath + "CS3.pdf", ""); 
     zip.AddFile(tempFolderPath + "CS4.pdf", ""); 
     zip.AddFile(tempFolderPath + "CS5.pdf", ""); 
     zip.Save(tempFolderPath + "Tester.xap"); //Xap Save Name 
    } 
+1

'HttpPostedFileBase'是已經被上傳文件的一個基類。爲什麼你的上傳方法採取其中之一?它可以被修改嗎? – Chris

+0

我使用的上傳方法涉及一個Fileupload,現在已經編程爲HttpPostedFileBase,有沒有辦法將zip文件轉換成HttpPostedFileBase? – Pomster

+1

有一種方法。在我看來,使用它是錯誤的。它與字符串或類似的東西一樣傳遞整數 - 它只是使用不適合作業的對象。上傳將在關鍵點可能只是使用HTTPPostedFileBase流(您可能只需替換爲標準文件流),或者在上傳文件之前將其保存到臨時位置,在這種情況下,您可以直接跳到該位置部分。無論它做什麼,我強烈建議至少考慮重構代碼,以便您的FileUpload以更好的方式工作 – Chris

回答

1

如果你真的想使一個zip文件到HttpPostedFileBase那麼你最好的選擇可能是創建一個從HttpPostedFileBase繼承的類,並根據需要覆蓋的方法。

有很多事情可以重寫,它們應該都很容易從文件對象中獲得(它們是文件名,內容長度和內容類型以及文件流本身)。

到目前爲止,最好的辦法是重構你的上傳方法,不需要HttpPostedFileBase對象。使它更常見的文件對象或流或類似(取決於上傳需要),然後創建一個覆蓋,它需要一個HttpPostedFileBase並提取它需要傳遞給主要上傳方法的位。

重構上傳方法可能超出了這個問題的範圍。

+0

謝謝,我想我會考慮更改我的方法。 – Pomster

0

只是一個想法,希望你能建立在這個

HttpPostedFile f = new HttpPostedFile(); 
f.InputStream = new System.IO.FileStream(); //replace this with Stream from your zip 
HttpPostedFileBase zipFile = new HttpPostedFileWrapper(f); 
+0

我沒有運行代碼,但從我所看到的InputStream是'readonly'(所有其他屬性),所以這是行不通的。 :( – Chris

+0

@Chris我實際上已經試過了代碼,在編譯時,其他的屬性('filename,contentlength,contenttype')都被強調爲只讀,但InputStream沒有,可能在運行時(我沒有測試過) – codingbiz

+0

奇怪的是,我在Reflector和http://msdn.microsoft.com/en-us/library/system.web.httppostedfile.inputstream.aspx中看到它只有一個getter(我檢查了所有的替代版本太奇怪了......多麼奇怪...... – Chris

相關問題