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

Posted

技术标签:

【中文标题】通过 HTTP 发布 Zip 文件不再在 Win 7 Zip 程序中打开【英文标题】:Posting Zip Files over HTTP No Longer Opening in Win 7 Zip Program 【发布时间】:2011-06-17 13:04:30 【问题描述】:

我有两段代码。一个上传 zipfile 和一个将上传文件保存到驱动器的服务器。我的问题是我上传了一个 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 文件中保存一些其他随机的东西。

更新 1:

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

-----------8cd8d0e69a0670b 内容处置:表单数据; 名称=“文件”;文件名="文件名.zip" 内容类型:application/octet-stream

所以我的问题是如何在不捕获标题信息的情况下保存 zip。

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

是的,在您发布的同时遇到了答案。 Request.Files[0].SaveAs(zipPath);做到了。谢谢!【参考方案2】:

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

【讨论】:

以上是关于通过 HTTP 发布 Zip 文件不再在 Win 7 Zip 程序中打开的主要内容,如果未能解决你的问题,请参考以下文章

64位Win7中7zip无法关联文件的问题

MYSQL在Win下免安装zip

尝试通过 Azure Function App 站点 URL 发布 ZIP 文件失败,HTTP 状态代码未经授权

怎么在win7环境下安装pyqt4

win7 安装mongodb扩展

我下载了一个win10 开发环境虚拟机安装文件 是zip 怎么办?虚拟机是vm