通过HTTP发布Zip文件不再在Win 7 Zip程序中打开

时间:2011-01-28 22:20:45

标签: c# asp.net file-upload upload zip

我有两位代码。一个上传zip文件的服务器和一个将上传保存到驱动器的服务器。我的问题是我上传了一个zip文件,该文件在Windows 7默认压缩程序中打开正常,但是当我尝试从网络服务器打开它时它也被发布了它将不再打开错误:

Windows无法打开该文件夹。压缩的压缩文件夹'blah'无效。

注1:文件在WinRar或其他zip程序中完全打开。

注意2:原始文件和服务器上的文件在磁盘上的大小完全相同,但服务器的大小为200字节更大

以下是上传拉链的代码:

        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文件中保存一些其他随机内容。

更新1:

当我在记事本中打开服务器的zip文件时,它包含

  

----------------------- 8cd8d0e69a0670b Content-Disposition:form-data;   NAME = “文件”;文件名= “filename.zip”   Content-Type:application / octet-stream

所以我的问题是如何保存zip而不捕获标题信息。

2 个答案:

答案 0 :(得分:3)

我认为问题是使用HttpRequest.SaveAs。我怀疑是保存整个请求,包括HTTP标头。在二进制文件编辑器中查看该文件,我怀疑你会在开始时找到标题。

使用HttpRequest.Files获取作为请求一部分上传的文件,并使用HttpPostedFile.SaveAs将文件保存到磁盘。

答案 1 :(得分:0)

您正在编写整个请求,其中可能包含一些Multipart MIME分隔符。我想你需要使用Request.Files