2009-02-12 8 views
3

Cela devrait être assez simple, et le téléchargement fonctionne. MAIS quand j'ouvre le fichier téléchargé sur le serveur FTP il montre des données binaires qui sont juste quelques caractères étranges qui ressemblent à ceci [] [] [] [], et c'est la bonne taille de fichier. comment ajouter des attributs ou des en-têtes qui indiqueront que ce fichier est un XML?ASP.NET C# télécharger le contenu MemoryStream via FTPwebRequest problème

public bool ProcessBatch(MemoryStream memStream) 
    { 
     bool result = true; 
     FTPaddress = DistributionResources.ftpServer; 
     CompleteFTPPath = DistributionResources.ftpPath; 

     request = (FtpWebRequest)FtpWebRequest.Create(FTPaddress + CompleteFTPPath); 
     request.Credentials = new NetworkCredential("username", "password"); 
     request.Method = WebRequestMethods.Ftp.UploadFile; 
     request.UsePassive = true; 
     request.UseBinary = true; 
     request.KeepAlive = false; 

     try 
     { 

      byte[] buffer = new byte[memStream.Length]; 

      memStream.Read(buffer, 0, buffer.Length); 
      memStream.Close(); 

      using (Stream reqStream = request.GetRequestStream()) 
      { 
       reqStream.Write(buffer, 0, buffer.Length); 
      } 

      //Gets the FtpWebResponse of the uploading operation 
      response = (FtpWebResponse)request.GetResponse(); 
      Console.WriteLine(response.StatusDescription); //Display response 

     } 
     catch(Exception ex) 
     { 
      result = false; 
     } 

     return result; 
    } 

Merci beaucoup

Répondre

3

Essayez de ne pas utiliser request.UseBinary = true

En d'autres termes, utilisez request.UseBinary = false. Sinon, il va télécharger le contenu sous forme de données binaires, ce qui est probablement la raison pour laquelle vous le voyez apparaître sur le serveur. Par exemple, si vous utilisez le client FTP en ligne de commande dans Windows, vous devez taper explicitement ascii avant put dans un fichier texte. Le même principe s'applique probablement ici.

+0

Oui, il est déjà défini sur true, vous pouvez le voir dans le code ci-dessus. Merci. – Sergey

+1

Non, je voulais dire le définir sur false. Le définir sur true signifie télécharger le contenu sous forme de données binaires - d'où la raison pour laquelle vous le voyez comme des données binaires sur le serveur. Je vais éditer la réponse pour être plus clair. –

+0

Je l'ai essayé avec UseBinary mis à faux aussi, même effet exact. Je suis allé de l'avant et au lieu d'utiliser le flux de mémoire, je l'ai écrit dans le fichier, puis FileStremed, il fonctionne de cette façon. – Sergey

Questions connexes