Публикация Zip-файлов по HTTP больше не открывается в Win 7 Zip Program - PullRequest
1 голос
/ 29 января 2011

У меня есть два бита кода.Тот, который загружает zip-файл и сервер, который сохраняет загрузку на диск.Моя проблема в том, что я загружаю zip-файл, который прекрасно открывается в программе архивации Windows 7 по умолчанию, но когда я пытаюсь открыть его с веб-сервера, он тоже был опубликован и больше не открывается с ошибкой:

Windowsне могу открыть папку.Сжатая сжатая папка 'blah' недопустима.

Примечание 1: файл полностью открывается в WinRar или других программах ZIP.

Примечание 2: исходный файли файл на сервере точно такого же размера на диске, но размер одного из серверов на 200 байтов больше

Вот код для загрузки zip-файлов:

        public static String UploadFile(String url, String filePath)
        {
            if (!File.Exists(filePath))
                throw new FileNotFoundException();

            try
            {
                using (var client = new WebClient())
                {
                    byte[] result = client.UploadFile(url, filePath);

                    UTF8Encoding enc = new UTF8Encoding();
                    string response = enc.GetString(result);

                    return response;
                }
            }
            catch (WebException webException)
            {
                HttpWebResponse httpWebResponse = webException.Response as HttpWebResponse;

                return (httpWebResponse == null) ? webException.Message : httpWebResponse.StatusCode.ToString();
            }
        }

Вот код на сервере, который сохраняет входящий файл (существует в загрузке страницы на странице .NET C # aspx):

        private void SaveZipFile()
        {
            string fileName;
            string zipPath;

            fileName = GenerateFileName();

            zipPath = _hhDescriptor.GetDirectory(path => Server.MapPath(("./" + _serviceName + "\\" + path)) + "\\" + fileName + ".zip");        


        if (!Directory.Exists(zipPath))
        {
            Directory.CreateDirectory(Path.GetDirectoryName(zipPath));
        }

        Request.SaveAs(zipPath, false);

        logger.Trace(string.Format("ManualUpload: Successfully saved uploaded zip file to {0}", zipPath));
    }

Любые идеи / или предложения, как возможные места, которые могут быть нарушеныбудет принята с благодарностью!Я, вероятно, сохраняю некоторые другие случайные вещи вместе с zip-файлом.

UPDATE 1:

Когда я открываю zip-файл сервера в блокноте, он содержит

----------------------- 8cd8d0e69a0670b Content-Disposition: form-data;Name = "файл";filename = "filename.zip" Content-Type: application / octet-stream

Поэтому мой вопрос заключается в том, как сохранить zip-файл без захвата информации заголовка.

Ответы [ 2 ]

3 голосов
/ 29 января 2011

Я считаю, что проблема заключается в использовании HttpRequest.SaveAs. Я подозреваю, что это сохраняет весь запрос, включая заголовки HTTP. Посмотрите на файл в редакторе двоичных файлов, и я подозреваю, что вы найдете заголовки в начале.

Используйте HttpRequest.Files, чтобы получить файлы, загруженные как часть запроса, и HttpPostedFile.SaveAs, чтобы сохранить файл на диск.

0 голосов
/ 29 января 2011

Вы пишете весь запрос, который может содержать несколько разделителей MIME Multipart. Я думаю, вам нужно использовать Request.Files .

...