2017-07-21 3 views
0

J'utilise RestSharp d'envoyer une requête POST, la requête POST contient un fichier zip avec les en-têtes suivants:Différence entre SendToZip et C# CreateFromDirectory zipfile

 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; 

En C# J'envoie la demande de manière synchrone.

Le fichier arrive au serveur, nous pouvons le voir arriver, donc nous ne pensons pas qu'il s'agit d'un problème RestSharp. Le problème que nous avons est que le fichier zip n'est pas géré correctement par notre serveur (qui est un serveur soutenu par un nœud construit sur une machine ubuntu). Nous pensons donc que le problème est la façon dont nous utilisons les bibliothèques C# pour créer le fichier zip. Le problème est lorsque j'envoie le même document en tant que fichier zip qui a été créé avec la fonctionnalité sendToZip sur le bureau (windows) cela fonctionne. Toutefois, lorsque je crée le fichier zip à l'aide de la méthode System.IO.Compression.ZipFile.CreateFromDirectory native de C# pour créer le fichier zip, le serveur ne répond pas.

Quelle est la différence entre les deux? J'utilise la méthode native System.IO.Compression.ZipFile.CreateFromDirectory de C# pour créer le fichier zip.

Nous ne sommes pas des experts en matière de compression et de compression, ni d'utilisation de .NET pour compresser des fichiers, mais nous avons effectué quelques opérations de dépannage de base. Lorsque nous ouvrons l'un de ces fichiers zip sur un Mac (une sorte de machine * nix), qui provient de notre compression .NET, nous rencontrons un problème où le zip est transformé en CPGZ et les choses semblent bizarres comme indiqué dans ce lien http://osxdaily.com/2013/02/13/open-zip-cpgz-file/. Une autre option que nous avons est de changer la manière dont notre serveur de noeud manipule les dossiers de fermeture éclair. Le serveur à la réception de la requête POST utilise adm-zip pour extraire le fichier zip. Est-ce que les experts en compression ont des conseils sur les moyens de tirer parti de ces bibliothèques pour s'assurer que notre fichier zip fonctionne multi plate-forme?

Répondre

0

me semble que vous manquez cette (mise en garde: Je ne suis pas familier avec RestSharp):

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

Je sais que les serveurs Linux ont tendance à être pointilleux sur les en-têtes HTTP correct Content-Type et si vous ne le définissez pas correctement alors il ne sera pas vu. À tout le moins, vous devriez utiliser quelque chose comme Fiddler2 pour voir si vos messages sont transmis correctement

+0

merci pour la suggestion à propos de fiddler J'ai vérifié les deux demandes en utilisant fiddler les demandes sont exactement les mêmes, ce qui me fait penser qu'il y a quelque chose sur le côté serveur qui fait cela. Je vais devoir creuser plus profondément - malheureusement, j'ai toujours été incapable de résoudre ce problème. –