Estoy creando un simple arrastrar-y-archivo-carga automáticamente a FTP uso de las ventanasCarga de archivos a FTP están dañados una vez en destino
y estoy usando el MSDN code a carga el archivo al FTP.
El código es bastante sencillo:
// Get the object used to communicate with the server.
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(String.Format("{0}{1}", FTP_PATH, filenameToUpload));
request.Method = WebRequestMethods.Ftp.UploadFile;
// Options
request.UseBinary = true;
request.UsePassive = false;
// FTP Credentials
request.Credentials = new NetworkCredential(FTP_USR, FTP_PWD);
// Copy the contents of the file to the request stream.
StreamReader sourceStream = new StreamReader(fileToUpload.FullName);
byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
sourceStream.Close();
request.ContentLength = fileContents.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(fileContents, 0, fileContents.Length);
requestStream.Close();
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
writeOutput("Upload File Complete!");
writeOutput("Status: " + response.StatusDescription);
response.Close();
y lo hace conseguir cargado en el FTP
El problema es cuando veo el archivo en un navegador, o simplemente descargue y trate de verlo en el escritorio obtengo:
ya que utiliza request.UseBinary = false;
y request.UsePassive = false;
pero no de costura para hacer cualquier tipo de buena que sea.
Lo que he descubierto fue eso, el archivo original tiene 122Kb longitud y en el FTP (y después de la descarga), que tiene 219Kb ...
¿Qué estoy haciendo mal?
Por cierto, el método uploadFileToFTP()
se ejecuta dentro de un BackgroundWorker
, pero que realmente no lo que hace que cualquier diferencia ...
datos binarios y UTF-8 no se mezcla bien. – dtb
@dtb usando 'Encoding.ASCII.GetBytes (sourceStream.ReadToEnd());' obtiene el mismo comportamiento ... – balexandre
Suspiro. ** Datos binarios ** y ** caracteres ** son dos cosas diferentes. Sí, puede codificar caracteres en bytes, pero no puede decodificar ciegamente los bytes que no codifican caracteres. – dtb