2009-05-08 28 views
5

ASP.NETでftpアカウントフォルダに直接ファイルをアップロードすることはできますか?ftp asp.netにアップロード

など。私は参照をクリックし、アップロードするファイルを選択し、 "アップロード"ボタンをクリックすると、それは他の場所にある別のWebサーバー上のフォルダに直接保存する必要があります。

答えて

0

EDIT

まずオフ@サインフラグに存在リテラルとして文字列です。バックスラッシュのような文字をエスケープする必要がありません。例えば

string path = "Z:\\Path\\To\\File.txt"; 
string path = @"Z:\Path\To\File.txt"; 

第二に、あなたが唯一の他のサーバへのFTPアクセスを持っている場合、あなたは、のFileUploadコントロールのFileUpload.FileBytesプロパティを取ることができます。それはあなたにファイル内容のbyte[]を与えるでしょう。

これより、ファイルをFTPアカウントにアップロードするにはSystem.Net.FtpWebRequest & System.Net.FtpWebResponseを使用します。

ここVB.NETでいくつかのサンプルコードをtheresのが、あなたは

http://www.programmingforums.org/thread15954.html

ORIG

ファイルアップロードコントロールは、ファイルを提供します把握することは十分に簡単なはずあなたのウェブサーバー上で。

FTPをホストしているサーバ にウェブサーバからそのファイルをコピー/保存するまではあなた次第です。

保存できる他のサーバーにUNCパス/マップドドライブを共有していますか。それはあなたのHTMLフォームから直接FTPにアップロードすることはできません

if (FileUpload1.HasFile) 
try 
{ 
    FileUpload1.SaveAs(@"Z:\Path\On\Other\Server\" + FileUpload1.FileName); 
} 
+0

答えてくれてありがとう..あなたは、@マークがために使用されているものを教えてもらえますか?ウェブページがサーバーとは別のサーバーにあるように物理的なパスではなくIPアドレスを使用できる場合は、ファイルをアップロードする予定です。 fpt.mydomain.com/imagesとその場合はこれを行うことができます、私はおそらくユーザーの資格情報を提供する必要がありますか?もしそうなら、どのように? –

+1

@サイトはvertabum文字列を作成します。基本的に\\ –

+0

という名前でエスケープする必要はありません。 –

0

だけの単純な問題ですので、

のFileUploadコントロールが.SaveAs()方法があります。しかし、それをあなたのASP.NETアプリケーションにアップロードしてからFtpWebRequestを使ってそこからFTPにアップロードすることができます。

4

あなたの質問を理解しているので、別のリモートサーバーにファイルをアップロードしたいのです(Webサーバーと同じネットワーク上にある別のサーバーではありません)。その場合、あなたはいくつかの異なることをすることができます。最も簡単な方法は、通常のファイルがサーバーあなたをアップロードすることによって開始し、その後、あなたのサーバーが他のリモートサーバにFTP経由でファイルを送信しているかもしれないです:

string fileName = Path.Combine("<path on your server", FileUpload1.FileName); 
FileUpload1.SaveAs(fileName); 
using(System.Net.WebClient webClient = new System.Net.WebClient()) 
{ 
    webClient.UploadFile(
     New Uri("ftp://remoteserver/remotepath/" + FileUpload1.FileName), 
     localFile); 
} 

...またはそれはそれをやってうまくいくかもしれません1つのステップ:

using(System.Net.WebClient webClient = new System.Net.WebClient()) 
{ 
    webClient.UploadData(
     New Uri("ftp://remoteserver/remotepath/" + FileUpload1.FileName), 
     FileUpload1.FileBytes); 
} 

アップデートを(私は...アウトこのコードを試してみてください、それに多少の誤差がある可能性がdin't):私はUploadXXX法と仮定で間違っていたことに気づきましたWebClientの静的だった...

4

WebClientクラスを使用すると、アップロードしたファイルをFTPに保存できます(サーバーにファイルとして保存することはありません)。このような何か:

string name = Path.GetFileName(UploadControl.FileName); 
byte[] data = UploadControl.FileBytes; 

using (WebClient client = new WebClient()) { 
    client.UploadData("ftp://my.ftp.server.com/myfolder/" + name, data); 
} 
+0

これは私のASP.NET Webアプリケーションでは間違いなく機能しません。なぜ私はそれが動作するようになることができないときに、これは人気のある解決策であるのだろうか。だからイライラする! >。< – Chiramisu

+0

@Chiramisu:あなたのケースではうまくいかない理由はいくつか考えられますが、適切な状況下で動作します。それは、それが動作しないようにすることを理解することの問題です。 – Guffa

+0

あなたはこのような古いスレッドに反応したことに驚いていますが、ありがとうございます。私は今、FTPにファイルを正常にアップロードしようとしています。問題について私の[質問](http://stackoverflow.com/questions/7744447/desperate-ftp-fileupload-wrong-client-path)を見ていただけるほど親切ですか? – Chiramisu

4
/// <summary> 
    /// Example call : if (FtpUpload(FileUploadControl1, "ftp.my.com/somePathDir", @"user", "pass!", "domain")) 
    /// </summary> 
    /// <param name="file"></param> 
    /// <param name="ftpServer"></param> 
    /// <param name="username"></param> 
    /// <param name="ftpPass"></param> 
    /// <returns></returns> 
    private bool FtpUpload(FileUpload file, string ftpServer, string username, string ftpPass, string domainName = "") 
    { 
     // ftp://domain\user:[email protected]/url-path 
     // If you are a member of a domain, then "ftp://domain-name\username:[email protected]" may fail because the backslash (\) is sent in as a literal character and Internet Explorer incorrectly looks for a file instead of parsing a Web address. Changing the backslash (\) in the domain-name\username to domainname%5Cusername works correctly. 

     try 
     { 
      string ftpAddres; 
      if (domainName != string.Empty) 
       ftpAddres = "ftp://" + domainName + @"%5C" + username + ":" + ftpPass + "@" + ftpServer + "/" + file.FileName; 
      else 
       ftpAddres = "ftp://" + username + ":" + ftpPass + "@" + ftpServer + "/" + file.FileName; 

      using (var webClient = new System.Net.WebClient()) 
      { 
       webClient.UploadData(new Uri(ftpAddres), file.FileBytes); 
      } 

     } 
     catch (Exception e) 
     { 
      throw new Exception(e.Message, e); 
     } 
     return true; 
    } 
関連する問題