zoukankan      html  css  js  c++  java
  • 应用程序中向web服务post文件

    参数说明:
    /// <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;
            }
  • 相关阅读:
    推送(评论,点赞,关注)
    php组成数组
    week6 10 后端backend server和mongoDB通信
    week06 09 NodeJS Server as a RPCclient
    week06 08 postman 测试jsonrpc
    week06 07 创建RPC SERVER 换个镜像安装下载
    week05 06绑定滚动条 去抖动
    week05 05restful api
    week5 04 npm run build
    week5 03 continus loading news
  • 原文地址:https://www.cnblogs.com/instinct/p/112047.html
Copyright © 2011-2022 走看看