C#上传字节[] FTP服务器内(c# upload a byte[] inside an FTP

2019-09-17 01:51发布

我需要上传一些数据和内部的FTP服务器。

下面就如何上传中的文件和FTP一切正常计算器职位。

我现在想提高我的上传。

相反,收集数据,将它们写入一个文件,然后上传我想收集数据,并将它们上传而不创建本地文件的FTP里面的文件。

要做到这一点我做到以下几点:

string uri = "ftp://" + ftpServerIp + "/" + fileToUpload.Name;
System.Net.FtpWebRequest reqFTP;
// Create FtpWebRequest object from the Uri provided
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIp + "/" + fileToUpload.Name));
// Provide the WebPermission Credintials
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
// By default KeepAlive is true, where the control connection is not closed after a command is executed.
reqFTP.KeepAlive = false;
// Specify the command to be executed.
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
// Specify the data transfer type.
reqFTP.UseBinary = true;
byte[] messageContent = Encoding.ASCII.GetBytes(message);
// Notify the server about the size of the uploaded file
reqFTP.ContentLength = messageContent.Length;
int buffLength = 2048;
// Stream to which the file to be upload is written
Stream strm = reqFTP.GetRequestStream();
// Write Content from the file stream to the FTP Upload Stream
int total_bytes = (int)messageContent.Length;
while (total_bytes > 0)
{
    strm.Write(messageContent, 0, buffLength);
    total_bytes = total_bytes - buffLength;
}
strm.Close();

现在什么情况如下:

  1. 我看到客户端连接到服务器
  2. 在创建文件
  3. 没有数据被传输
  4. 在某些时候线程终止连接被关闭
  5. 如果我检查上传的文件是空的。

我想要传输的数据是字符串类型,这就是为什么我做字节[] = messageContent的Encoding.ASCII.GetBytes(消息);

我究竟做错了什么?

此外:如果我编码日期ASCII.GetBytes,在远程服务器上会我有一个文本文件或文件与一些字节?

谢谢你的任何建议

Answer 1:

一个问题,我的代码看到的是,你正在写的同一字节在每次迭代的服务器:

while (total_bytes > 0)
{
    strm.Write(messageContent, 0, buffLength); 
    total_bytes = total_bytes - buffLength;
}

你需要做这样的事情来改变偏移位置:

while (total_bytes < messageContent.Length)
{
    strm.Write(messageContent, total_bytes , bufferLength);
    total_bytes += bufferLength;
}


Answer 2:

您正在尝试写更多的数据比你。 你在代码每次写入2048个字节块,如果数据少,你会告诉write方法试图访问该数组外字节,这当然不会。

所有你应该需要写入的数据是:

Stream strm = reqFTP.GetRequestStream();
strm.Write(messageContent, 0, messageContent.Length);
strm.Close();

如果你需要写的块中的数据,你需要保持在数组中的偏移量的轨迹:

int buffLength = 2048;
int offset = 0;

Stream strm = reqFTP.GetRequestStream();

int total_bytes = (int)messageContent.Length;
while (total_bytes > 0) {

  int len = Math.Min(buffLength, total_bytes);
  strm.Write(messageContent, offset, len);
  total_bytes -= len;
  offset += len;
}

strm.Close();


文章来源: c# upload a byte[] inside an FTP server
标签: c# ftp bytearray