2011-07-15 51 views
-4

我正在使用将文件自动传输到服务器的简单应用程序进行文件上载控制。以编程方式将文件从客户端上传到服务器

我用作参考的那些示例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:

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



    } 

在我的情况下,我想通过WebBrowser控件使用这个类,但是当我送岗位服务器文件(test.jpg)未创建!

这可能是文件夹权限问题!但是当使用IIS进行本地测试时,我遇到了同样的问题?

感谢

+1

提供了一些代码,太泛泛的问题。 – Tigran

+1

你可以发布你使用的代码吗?你是否有任何具体的错误?您没有给我们提供任何有用的信息,我们可以帮助您。 – Jason

+0

做这个链接中描述的内容:http://www.codeproject.com/KB/cs/uploadfileex.aspx UploadFileEx是一个自定义类。如果你需要帮助,你必须提供你的所有代码。 –

回答

2

这是一个有点难以明白你的问题,很抱歉,如果这不是正确的答案,但如果你想使用标准张贴的WebRequest上传一个文件,那么它是这样的:Upload files with HTTPWebrequest (multipart/form-data)

+0

我已经看过这段代码,但是如何在请求中设置表单域。 – nayung

相关问题