我本无心

instinct

博客园 首页 新随笔 联系 订阅 管理
参数说明:
/// <param name="uploadfile">要提交的文件位置如C:\a.txt</param>
  /// <param name="url">接受文件的web地址如 http://www.yourserver.com/upload.dll</param>
  /// <param name="fileFormName">窗体名称</param>
  /// <param name="contenttype"></param>
  /// <param name="querystring">参数的一个集合</param>
  /// <param name="cookies"></param>
  /// <returns></returns>


public class UploadHelper
    
{
    
        
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);

            webrequest.Timeout 
= 1000000;

            
//System.Windows.Forms.MessageBox.Show(webrequest.Timeout.ToString());

            WebResponse responce 
= webrequest.GetResponse();

            Stream s 
= responce.GetResponseStream();

            StreamReader sr 
= new StreamReader(s);

            
string str = sr.ReadToEnd();


            fileStream.Close();

            requestStream.Close();
            
            sr.Close();

            s.Close();
            
            responce.Close();

            
return str;
        }

#if debug        
        
/// <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();
            
            
// 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>


            querystring[
"username"]="uname";
            querystring[
"password"]="snake3";
            querystring[
"filename"]="admin.zip";

            
            
string uploadfile;// set to file to upload

            uploadfile 
= "c:\\admin.zip";
            

            
//everything except upload file and url can be left blank if needed

            
string str = UploadFileEx(uploadfile,"http://10.0.0.6:8600/aisapi/UploadExtReport.dll","Filedata""multipart/form-data",
                querystring,cookies);

            Console.Write(str);
            Console.ReadLine();

            
/*
                *
                contents of test.php
                <?php

                print_r($_REQUEST);

                $uploadDir = '%SOMEPATH';
                $uploadFile = $uploadDir . $_FILES['userfile']['name'];
                print "<pre>";
                if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadFile))
                {
                    print "File is valid, and was successfully uploaded. ";
                }
                else
                {
                    print "Possible file upload attack!  Here's some debugging info:\n";
                    print_r($_FILES);
                }
                print "</pre>";

                ?>
*/

        }

#endif
    }


示例:
public string UploadFileEx(string strKey, string Username,string Password,string strFileName)
        
{
            CookieContainer cookies 
= new CookieContainer();
            
//add or use cookies

            NameValueCollection querystring 
= new NameValueCollection();
            
            
// 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>
            
            
            
            querystring[
"username"]=Username;

            querystring[
"password"]=Password;
            
            
            
            querystring[
"filename"]= strFileName;


            
//everything except upload file and url can be left blank if needed

            
string str = UploadHelper.UploadFileEx(strFileName,Url+"/aisapi/UploadExtReport.dll","Filedata""multipart/form-data",
                querystring,cookies);

            
return str;
        }
posted on 2005-03-03 13:35  我本无心  阅读(1680)  评论(3编辑  收藏  举报