使用 HttpWebRequest 传输到 ftp 站点

本文关键字:ftp 站点 传输 HttpWebRequest 使用 | 更新日期: 2023-09-27 18:34:27

>我正在尝试将 Excel 文件传输到 sftp 站点,并且我的代码执行正常,但我在站点上看不到该文件。

private static void SendFile(string FileName)
{
    FileStream rdr = new FileStream(FileName + ".csv", FileMode.Open);
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://sftp.somesite.com");
    HttpWebResponse resp;
    req.Method = "Post";
    req.Credentials = new NetworkCredential("UN", "PW", "Domain");
    req.ContentLength = rdr.Length;
    req.AllowWriteStreamBuffering = true;
    Stream reqStream = req.GetRequestStream();
    byte[] inData = new byte[rdr.Length];
    int bytesRead = rdr.Read(inData, 0, Convert.ToInt32(rdr.Length));
    reqStream.Write(inData, 0, Convert.ToInt32(rdr.Length));
    rdr.Close();
}

我在上面的代码中做错了什么?

使用 HttpWebRequest 传输到 ftp 站点

为什么不使用 FtpWebRequest?

using System.Net;
using System.IO;
public class Ftp
{
  private static void ftpUpload(string filename, string destinationURI)
  {
        FileInfo fileInfo = new FileInfo(filename);
        FtpWebRequest reqFTP = CreateFtpRequest(new Uri(destinationURI));
        reqFTP.KeepAlive = false;
        // Specify the command to be executed.
        reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
        // use binary 
        reqFTP.UseBinary = true;
        reqFTP.ContentLength = fileInfo.Length;
        // Buffer size set to 2kb
        const int buffLength = 2048;
        byte[] buff = new byte[buffLength];
        // Stream to which the file to be upload is written
        Stream strm = reqFTP.GetRequestStream();
        FileStream fs = fileInfo.OpenRead();
        // Read from the file stream 2kb at a time
        int cLen = fs.Read(buff, 0, buffLength);
        // Do a while till the stream ends
        while (cLen != 0)
        {
            // FTP Upload Stream
            strm.Write(buff, 0, cLen);
            cLen = fs.Read(buff, 0, buffLength);
        }
        // Close 
        strm.Close();
        fs.Close();
   }
 }
  1. 发布不会放置文件。它将数据发送到服务器端脚本。
  2. 这是完整的网址吗?前缀为"http://"的域名不会构成有效的 URI,该 URI 必须包含资源的路径和名称。
  3. URL 中的"sftp"可能表示必须使用 SSH 文件传输协议 (SFTP),而不是 FTP 或 HTTP
  4. 谁说上传到FTP资源会以这种方式工作?

正如尤金在#3中所说

当您说"SFTP"时,您是指通过SSL或SSH文件传输协议的FTP。它们需要不同的方法。如果您确实在使用SFTP,例如在SSH文件传输中,我认为您最好使用第三方库(如果可以的话),例如sharpSSH。(http://sshnet.codeplex.com/)

关于SFTP的维基 - http://en.wikipedia.org/wiki/SSH_File_Transfer_Protocol