SendToZip和C#CreateFromDirectory zipfile

时间:2017-07-21 23:59:56

标签: c# .net linux zip adm-zip

我正在使用RestSharp发送POST请求,POST请求包含一个zip文件以及以下标题:

        request.AddParameter("username", this.username, ParameterType.GetOrPost);
        request.AddParameter("userid", this.userid, ParameterType.GetOrPost);
        request.AddParameter("projectid", this.projectid, ParameterType.GetOrPost);
        //add the file
        request.AddFile("os_serverpackage", this.filelocation);
        request.AlwaysMultipartFormData = true;

在C#中,我正在同步发送请求。

该文件正在向服务器发送,我们可以看到它正在通过,所以我们不认为这是一个RestSharp问题。

我们遇到的问题是我们的服务器(在ubuntu机器上构建的节点支持的服务器)没有正确处理zip文件。

因此我们认为问题在于我们使用C#库创建zip文件的方式。

问题是当我发送同一个文件作为zip文件时,它是使用桌面(windows)上的sendToZip功能创建的。但是,当我使用C#的本机System.IO.Compression.ZipFile.CreateFromDirectory方法创建zip文件时,服务器无法响应。

两者有什么区别?

我正在使用C#的原生System.IO.Compression.ZipFile.CreateFromDirectory方法来创建zip文件。

我们不是拉链和压缩方面的专家,也不是使用.NET来压缩文件,但我们已经做了一些基本的故障排除。当我们在Mac(一种* nix机器)上打开这些zip文件中的一个时,这些文件来自我们的.NET压缩,我们遇到了一个问题,其中zip被转换为CPGZ,并且事情看起来很奇怪,如此链接中所述http://osxdaily.com/2013/02/13/open-zip-cpgz-file/

我们的另一个选择是更改节点服务器处理zip文件的方式。 POST请求接收端的服务器使用adm-zip解压缩zip文件。

是否有任何压缩专家有关于如何利用这些库来确保我们的zip文件跨平台工作的任何提示?

1 个答案:

答案 0 :(得分:0)

在我看来,你错过了这一点(警告:我不熟悉RestSharp):

request.AddHeader("Content-Type", "application/zip, application/octet-stream");

我知道Linux服务器对于正确的Content-Type HTTP标头往往很挑剔,如果你没有正确设置它,那么它就不会被人看到。至少你应该使用像Fiddler2这样的东西来查看你的消息是否正确传输