Ошибка загрузки zip-файла - PullRequest
0 голосов
/ 02 марта 2012

Я использую 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 = новый ZipFile (фс);

Как мне пройти эту ошибку?

[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 ]

1 голос
/ 02 марта 2012

HttpPostedFileBase.FileName - это имя загруженного файла, а не местоположение файла, хранящегося на сервере. HttpPostedFileBase не сохраняет файл на сервере, только в виде потока. Вы можете либо открыть поток в памяти (если сторонние утилиты разрешают открывать потоки), либо сохранить файл в известном месте, а затем открыть его из этого места.

0 голосов
/ 02 марта 2012

Если вы хотите проверить, является ли это zip-файл, вы всегда можете посмотреть на возвращаемый тип контента.

application/zip

Это может сработать для того, что вы пытаетесь сделать. Кроме того, просто попробуйте и посмотрите, какой тип контента, вы можете найти что-то более специфическое для ваших нужд.

0 голосов
/ 02 марта 2012

Path.GetFullPath получает полный путь от текущего каталога.
Это не имеет ничего общего с вашим HttpUploadedFileBase, которого нет на диске.

Вам нужно передать поток вместопуть к файлу.

...