关于HttpWebRequest上传文件

我们web 操作离不开 http请求响应 HttpWebRequest上传文件也是一样的道理

下面码一些代码:

  

 private void UploadFile(string strRequestUri, string strCookie, string filename)
    {
        // 初始化HttpWebRequest
        HttpWebRequest httpRequest = (HttpWebRequest)HttpWebRequest.Create(strRequestUri);

        // 封装Cookie
        Uri uri = new Uri(strRequestUri);
        Cookie cookie = new Cookie("Name", strCookie);
        CookieContainer cookies = new CookieContainer();
        cookies.Add(uri, cookie);
        httpRequest.CookieContainer = cookies;

        // 生成时间戳
        string strBoundary = "----------" + DateTime.Now.Ticks.ToString("x");
        byte[] boundaryBytes = Encoding.ASCII.GetBytes(string.Format("\r\n--{0}--\r\n", strBoundary));

        // 填报文类型
        httpRequest.Method = "Post";
        httpRequest.Timeout = 1000 * 120;
        httpRequest.ContentType = "multipart/form-data; boundary=" + strBoundary;

        // 封装HTTP报文头的流
        StringBuilder sb = new StringBuilder();
        sb.Append("--");
        sb.Append(strBoundary);
        sb.Append(Environment.NewLine);
        sb.Append("Content-Disposition: form-data; name=\"");
        sb.Append("file");
        sb.Append("\"; filename=\"");
        sb.Append(filename);
        sb.Append("\"");
        sb.Append(Environment.NewLine);
        sb.Append("Content-Type: ");
        sb.Append("multipart/form-data;");
        sb.Append(Environment.NewLine);
        sb.Append(Environment.NewLine);
        byte[] postHeaderBytes = Encoding.UTF8.GetBytes(sb.ToString());

        // 计算报文长度
        long length = postHeaderBytes.Length + this.FileUpload1.PostedFile.InputStream.Length + boundaryBytes.Length;
        httpRequest.ContentLength = length;

        // 将报文头写入流
        Stream requestStream = httpRequest.GetRequestStream();
        requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);

        // 将上传文件内容写入流 //每次上传4k  1024*4
        byte[] buffer = new Byte[checked((uint)Math.Min(4096, (int)this.FileUpload1.PostedFile.InputStream.Length))];
        int bytesRead = 0;

        while ((bytesRead = this.FileUpload1.PostedFile.InputStream.Read(buffer, 0, buffer.Length)) != 0)
        {
            requestStream.Write(buffer, 0, bytesRead);
        }

        // 将报文尾部写入流
        requestStream.Write(boundaryBytes, 0, boundaryBytes.Length);
        // 关闭流
        requestStream.Close();
    }

    protected void btnRelease_Click(object sender, EventArgs e)
    {
        this.UploadFile(@"http://localhost/Qpdfgesigntest/SystemManager/WebsitePublishing/test.aspx", "yangtest", this.FileUpload1.PostedFile.FileName);
    }
public partial class SystemManager_WebsitePublishing_test : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.Files.Count > 0)
        {
            try
            {
                HttpPostedFile file = Request.Files[0];
                string filePath = "D:\\test\\" + file.FileName;
                file.SaveAs(filePath);

            }
            catch
            {

            }
        }
    }
}
时间: 2024-11-05 02:48:54

关于HttpWebRequest上传文件的相关文章

WebClient和HttpWebRequest 上传文件

这几天对接淘宝的上传航司政策的接口.对期间出现的问题,以及使用WebClient和HttpWebReques 上传文件进行总结.本文重要信息已使用'*'代替 1.WebClient上传文件 使用UploadFile上传文件,其中fileNamePath为物理路径. public bool UpLoadFile(string fileNamePath,string url) { string timeStamp = DateTime.Now.ToString("YYYY-MM-DD HH:mm:s

HttpWebRequest上传文件(Excel等)

//上传代码/// <summary> /// 文件上传 /// </summary> /// <param name="strAddress">路径地址,不包括服务地址</param> /// <param name="postedFile"></param> /// <returns></returns> public static IResponseResult H

winform HttpWebRequest上传文件

Winform点击button按钮上传: string filePath = "E:\\test.rar"; string fileName = "test.rar"; string postURL = "http://localhost:5995/Default.aspx"; // 边界符 var boundary = "---------------" + DateTime.Now.Ticks.ToString("

[转]C#在WinForm下使用HttpWebRequest上传文件并显示进度

/// <summary> /// 将本地文件上传到指定的服务器(HttpWebRequest方法) /// </summary> /// <param name="address">文件上传到的服务器</param> /// <param name="fileNamePath">要上传的本地文件(全路径)</param> /// <param name="saveName&qu

C# 使用HttpWebRequest通过PHP接口 上传文件

1:上传文件实例 public void UploadXMLLog(string xmlpath)        {            NameValueCollection nvc = new NameValueCollection();            CookieContainer cookies = new CookieContainer();            nvc.Add("", “”);            ......            strin

C# 采用HttpWebRequest 自定义头信息 上传文件

刚实习的时候遇到一个问题:上传文件的URL有特定格式限制,需要按格式定义头信息,才能上传成功.查资料时候当时好像是java版本的,C#代码贴上. //uploadFile:上传文件名 groupId:GUID public string FileUpload(string uploadFile, string groupId) { //从流中读取字节块并将该数据写入给定缓冲区buffer中 FileStream fileStream = new FileStream(uploadFile, Fi

[C#]通过Http报文上传文件

前言 这段时间做C#客户端项目时,在网上找到一个用Http请求实现文件上传的方法,实测有效. 在讲解如何实现Http上传文件之前,不妨先了解一下Http上传文件报文是什么样的.相信看了报文结构,有利于了解代码的实现过程. 下图是我自己的程序上传文件时时,用wireshark抓取的包内容. 可以看到,这个Http报文结构其实并不复杂. 需要注意的是,这个报文中有一个boundary,这是一个识别文件流的边界,用来标识文件开始和结尾的位置. 接下来,我将一步步说明如何封装Http上传文件报文. C#

winform中进行post上传文件

winform中要上传文件到远程的服务器上面,我在本地用的是post方式传递数据,用的是HTTP协议,具体代码如下: 下面的代码就是一个上传的方法,参数需要路径和文件路径就可以了,我本地winform只需要提交post请求就可以了,止于对于post请求如何处理,那就是远程服务端的事情了. private string uploadFile(string uriAddress, string uploadfilePath) { HxSpecCore.SpectrumSet ss = new Spe

c# 模拟表单提交,post form 上传文件、大数据内容

表单提交协议规定:要先将 HTTP 要求的 Content-Type 设为 multipart/form-data,而且要设定一个 boundary 参数,这个参数是由应用程序自行产生,它会用来识别每一份资料的边界 (boundary),用以产生多重信息部份 (message part).而 HTTP 服务器可以抓取 HTTP POST 的信息, 基本内容:1. 每个信息部份都要用 --[BOUNDARY_NAME] 来包装,以分隔出信息的每个部份,而最后要再加上一个 --[BOUNDARY_N