3

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();
}

上記のコードで何が間違っていますか?

4

3 に答える 3

4

代わりに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();
   }
 }
于 2012-05-16T17:51:43.007 に答える
0
  1. Post はファイルを置きません。サーバー側のスクリプトにデータを送信します。
  2. それは完全な URL ですか?"http://" を前に付けたドメイン名は、有効な URI を作成しません。これには、リソースのパスと名前を含める必要があります。
  3. URL の「sftp」は、FTP や HTTP ではなく、SSH ファイル転送プロトコル (SFTP) を使用する必要があることを示している場合があります。
  4. FTP リソースへのアップロードがこのように機能すると誰が言いましたか?
于 2012-05-16T17:59:48.673 に答える
0

Eugene が#3で言ったように

「SFTP」と言うとき、FTP over SSL または SSH ファイル転送プロトコルを意味しますか。それらには異なるアプローチが必要です。SSH ファイル転送のように実際に SFTP を使用している場合は、sharpSSH などのサード パーティ製ライブラリを使用した方がよいと思います (http://sshnet.codeplex.com/ )。

SFTP に関する Wiki - http://en.wikipedia.org/wiki/SSH_File_Transfer_Protocol

于 2012-05-16T18:07:59.350 に答える