0

我正在使用 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 文件的方式。

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

两者有什么区别?

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

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

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

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

4

1 回答 1

0

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

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

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

于 2017-07-22T00:42:12.717 回答