.Net使用HttpWebRequest构造POST请求(带文件)_备忘

本文详细介绍了如何使用C#语言通过HTTP POST请求上传文件到服务器的方法,包括构造请求头、设置边界、发送表单数据以及接收响应内容等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public string CreatePostData(string url, string uid, string savename, string filename, string filepath)
        {
            string boundary = Guid.NewGuid().ToString().Replace("-", "");  

            System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
            req.Method = "POST";
            req.ContentType = "multipart/form-data; boundary=" + boundary;

            byte[] beginBoundary = Encoding.UTF8.GetBytes("\r\n--" + boundary + "\r\n");
            byte[] endBoundary = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n");
            string formitem = string.Empty;
            byte[] formitembytes = null;

            Stream memStream = new MemoryStream();
            memStream.Write(beginBoundary, 0, beginBoundary.Length);
            formitem = "Content-Disposition: form-data; name=\"uid\"\r\n\r\n" + uid;
            formitembytes = Encoding.UTF8.GetBytes(formitem);
            memStream.Write(formitembytes, 0, formitembytes.Length);

            memStream.Write(beginBoundary, 0, beginBoundary.Length);
            formitem = "Content-Disposition: form-data; name=\"savename\"\r\n\r\n" + savename;
            formitembytes = Encoding.UTF8.GetBytes(formitem);
            memStream.Write(formitembytes, 0, formitembytes.Length);

            memStream.Write(beginBoundary, 0, beginBoundary.Length);
            formitem = "Content-Disposition: form-data; name=\"savefile\"; filename=\"" + filename + "\"\r\n";
            formitembytes = Encoding.UTF8.GetBytes(formitem);
            memStream.Write(formitembytes, 0, formitembytes.Length);

            formitem = "Content-Type: application/octet-stream\r\n\r\n";
            formitembytes = Encoding.UTF8.GetBytes(formitem);
            memStream.Write(formitembytes, 0, formitembytes.Length);

            formitembytes = System.IO.File.ReadAllBytes(filepath);
            memStream.Write(formitembytes, 0, formitembytes.Length);

            memStream.Write(endBoundary, 0, endBoundary.Length);


            memStream.Position = 0;
            byte[] bytes = new byte[memStream.Length];
            memStream.Read(bytes, 0, bytes.Length);
            memStream.Close();
            System.IO.Stream newStream = req.GetRequestStream();
            newStream.Write(bytes, 0, bytes.Length);
            newStream.Close();

            System.IO.Stream instream = req.GetResponse().GetResponseStream();
            string content = new System.IO.StreamReader(instream, System.Text.Encoding.UTF8).ReadToEnd();
            return content;
        }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值