Разница между SendToZip и C# CreateFromDirectory zipfile
Я использую 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.
Проблема, с которой мы сталкиваемся, заключается в том, что zip-файл неправильно обрабатывается нашим сервером (который является сервером с поддержкой узлов, созданным на компьютере с Ubuntu).
Поэтому мы считаем, что проблема в том, как мы используем библиотеки C# для создания zip-файла.
Проблема в том, что когда я отправляю тот же документ, что и zip-файл, созданный с помощью функции sendToZip на рабочем столе (windows), он работает. Однако, когда я создаю zip-файл с использованием собственного метода C. System.IO.Compression.ZipFile.CreateFromDirectory для создания zip-файла, сервер не отвечает.
Какая разница между двумя?
Я использую родной метод C# System.IO.Compression.ZipFile.CreateFromDirectory для создания zip-файла.
Мы не являемся экспертами в области zip и сжатия или использования.NET для сжатия файлов, но мы выполнили некоторые базовые действия по устранению неполадок Когда мы открываем один из этих zip-файлов на Mac (своего рода *nix-машине), созданный в результате сжатия.NET, мы сталкиваемся с проблемой, когда zip превращается в CPGZ, и все выглядит странно, как показано в этой ссылке. http://osxdaily.com/2013/02/13/open-zip-cpgz-file/.
Другой вариант, который у нас есть, это изменить способ, которым наш сервер узлов обрабатывает zip-файлы. Сервер на принимающей стороне POST-запроса использует adm-zip для распаковки zip-файла.
Есть ли у экспертов по сжатию какие-либо советы о том, как использовать эти библиотеки для обеспечения кроссплатформенности нашего zip-файла?
1 ответ
Сдается мне, что вам не хватает этого (предостережение: я не знаком с RestSharp):
request.AddHeader("Content-Type", "application/zip, application/octet-stream");
Я знаю, что серверы Linux, как правило, суетятся по поводу правильных HTTP-заголовков Content-Type, и если вы не установите их правильно, они не будут видны. По крайней мере, вы должны использовать что-то вроде Fiddler2, чтобы увидеть, правильно ли передаются ваши сообщения