上传zip文件错误

时间:2012-03-01 20:20:32

标签: c# asp.net asp.net-mvc uploadify

我正在使用Uploadify在我的ASP.NET MVC应用程序中上传多个文件。在控制器操作中,我需要检查其中一个上传的文件是否是zip文件,如果是,我需要检查其内容。对于zip功能,我使用的是ICSharpCode.SharpZipLib。

从说我的桌面上传zip文件时,我收到以下错误: 无法在以下代码行中找到文件'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);
        }

3 个答案:

答案 0 :(得分:1)

HttpPostedFileBase.FileName是上传文件的名称,而不是存储在服务器上的文件上的位置。 HttpPostedFileBase不会将文件存储在服务器上,仅作为流存储。您的选项要么在内存中打开流(如果您的第三方实用程序允许打开流),要么将文件保存到已知位置,然后从该位置打开它。

答案 1 :(得分:0)

Path.GetFullPath从当前目录获取完整路径 这与您的HttpUploadedFileBase无关,而{{1}}不在磁盘上。

您需要传递流而不是文件路径。

答案 2 :(得分:0)

如果要检查它是否是zip文件,您可以随时查看返回的内容类型。

application/zip

这可能适合您要做的事情。另外,只要尝试查看内容类型,您就可以找到更符合您需求的内容。