2011-07-15 23 views
-4

私はファイルをサーバーに自動的に転送する単純なアプリケーションでfileuploadコントロールを作成しています。クライアントからサーバーへプログラムでファイルをアップロード

参考資料として、Setting a file to upload inside the WebBrowser componentUploadFileExを使用しましたが、テストしたところでサーバーにファイルが作成されませんでした。

フォームコード:

// simulate this form 
     //<form action ="http://localhost/test.php" method = POST> 
     //<input type = text name = uname> 
     //<input type = password name =passwd> 
     //<input type = FILE name = uploadfile> 
     //<input type=submit> 

私はポストは、HttpWebRequestを使用してサーバへのファイルこのクラスが見つかりました:私はポストを送信するとき、私は、WebBrowserコントロールを経由して、このクラスを使用したいが、私の場合は

public static string UploadFileEx( string uploadfile, string url, 
     string fileFormName, string contenttype,NameValueCollection querystring, 
     CookieContainer cookies) 
    { 
     if((fileFormName== null) || 
      (fileFormName.Length ==0)) 
     { 
      fileFormName = "file"; 
     } 

     if((contenttype== null) || 
      (contenttype.Length ==0)) 
     { 
      contenttype = "application/octet-stream"; 
     } 


     string postdata; 
     postdata = "?"; 
     if (querystring!=null) 
     { 
      foreach(string key in querystring.Keys) 
      { 
       postdata+= key +"=" + querystring.Get(key)+"&"; 
      } 
     } 
     Uri uri = new Uri(url+postdata); 


     string boundary = "----------" + DateTime.Now.Ticks.ToString("x"); 
     HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(uri); 
     webrequest.CookieContainer = cookies; 
     webrequest.ContentType = "multipart/form-data; boundary=" + boundary; 
     webrequest.Method = "POST"; 


     // Build up the post message header 
     StringBuilder sb = new StringBuilder(); 
     sb.Append("--"); 
     sb.Append(boundary); 
     sb.Append("\r\n"); 
     sb.Append("Content-Disposition: form-data; name=\""); 
     sb.Append(fileFormName); 
     sb.Append("\"; filename=\""); 
     sb.Append(Path.GetFileName(uploadfile)); 
     sb.Append("\""); 
     sb.Append("\r\n"); 
     sb.Append("Content-Type: "); 
     sb.Append(contenttype); 
     sb.Append("\r\n"); 
     sb.Append("\r\n");   

     string postHeader = sb.ToString(); 
     byte[] postHeaderBytes = Encoding.UTF8.GetBytes(postHeader); 

     // Build the trailing boundary string as a byte array 
     // ensuring the boundary appears on a line by itself 
     byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n"); 

     FileStream fileStream = new FileStream(uploadfile, FileMode.Open, FileAccess.Read); 
     long length = postHeaderBytes.Length + fileStream.Length + boundaryBytes.Length; 
     webrequest.ContentLength = length; 

     Stream requestStream = webrequest.GetRequestStream(); 

     // Write out our post header 
     requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length); 

     // Write out the file contents 
     byte[] buffer = new Byte[checked((uint)Math.Min(4096, (int)fileStream.Length))]; 
     int bytesRead = 0; 
     while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) 
      requestStream.Write(buffer, 0, bytesRead); 

     // Write out the trailing boundary 
     requestStream.Write(boundaryBytes, 0, boundaryBytes.Length); 
     requestStream.Flush(); 
     requestStream.Close(); 
     WebResponse responce = webrequest.GetResponse(); 
     Stream s = responce.GetResponseStream(); 
     StreamReader sr = new StreamReader(s); 

     return sr.ReadToEnd(); 

    } 
    /// <summary> 
    /// The main entry point for the application. 
    /// </summary> 
    [STAThread] 
    static void Main(string[] args) 
    { 
     CookieContainer cookies = new CookieContainer(); 
     //add or use cookies 

     NameValueCollection querystring = new NameValueCollection(); 

     querystring["uname"]=""; 
     querystring["passwd"]=""; 

     string uploadfile;// set to file to upload 

     uploadfile = "C:\\test.jpg"; 

     UploadFileEx(uploadfile, "http://127.0.0.1/app/Default.aspx", "uploadfile", "image/pjpeg", 
         querystring, cookies); 



    } 

を作成されていないファイル(test.jpg)をサーバーに送信する

フォルダの権限の問題かもしれません!しかし、IISを使ってローカルでテストしたところ、同じ問題が発生しましたか?

おかげ

+1

は、あまりにも一般的な質問をいくつかのコードを提供します。 – Tigran

+1

使用しているコードを投稿できますか?特定のエラーが発生していますか?あなたが私たちに助けになる有用な情報を与えていない。 – Jason

+0

このリンクに記載されている内容を正確に実行してください。http://www.codeproject.com/KB/cs/uploadfileex.aspx UploadFileExはカスタムクラスです。助けが必要な場合は、すべてのコードを提供する必要があります。 –

答えて

2

これが正しい答えではありませんが、標準のPOSTでWebRequestクラスを使用してファイルをアップロードする場合、それはこのようになった場合には、あなたの質問を理解することはとても残念少し難しい:Upload files with HTTPWebrequest (multipart/form-data)

+0

私はすでにこのコードを見てきましたが、リクエスト内でフォームフィールドを設定する方法はあります。 – nayung

関連する問題