2012-10-05 82 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

相关问题