我正在使用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文件跨平台工作的任何提示?
答案 0 :(得分:0)
在我看来,你错过了这一点(警告:我不熟悉RestSharp):
request.AddHeader("Content-Type", "application/zip, application/octet-stream");
我知道Linux服务器对于正确的Content-Type HTTP标头往往很挑剔,如果你没有正确设置它,那么它就不会被人看到。至少你应该使用像Fiddler2这样的东西来查看你的消息是否正确传输