先建立一个WebApplication
Web.config
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.web> <!--<globalization requestEncoding="gb2312" responseEncoding="gb2312" fileEncoding="gb2312"/>--> <compilation debug="true" /> <authentication mode="Windows" /> </system.web> </configuration>
Server.ashx
using System; using System.Data; using System.Web; using System.Collections; using System.Web.Services; using System.Web.Services.Protocols; using System.IO; using System.Text; namespace WebApplication1 { [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class Server : IHttpHandler { public void ProcessRequest(HttpContext context) { try { string saveDirectory = @"f:\temp"; string user = context.Request.Form["user"].ToString(); string pass = context.Request.Form["pass"].ToString(); if (!(user == "abc" && pass == "123")) { context.Response.Write("验证出错!"); } HttpPostedFile postFile = context.Request.Files["myFile"]; string postFileName = Path.GetFileName(postFile.FileName); byte[] bufferFile = new byte[postFile.ContentLength]; postFile.InputStream.Read(bufferFile, 0, postFile.ContentLength); string savePath = Path.Combine(saveDirectory, postFileName); using (FileStream stream = new FileStream(savePath, FileMode.Create, FileAccess.Write)) { stream.Write(bufferFile, 0, bufferFile.Length); stream.Flush(); stream.Close(); } context.Response.Write("提交成功!"); } catch (Exception ex) { context.Response.Write(ex.Message); } } public bool IsReusable { get { return false; } } } }
选建个html测试下
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>测试提交</title> </head> <body> <form action="Server.ashx" enctype="multipart/form-data" method="post"> <input type="text" name="user" value="abc" /> <input type="text" name="pass" value="123"/> <input type="file" name="myFile" /> <input type="submit" /> </form> </body> </html>
再用C#按Http协议提交:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Net; using System.IO; namespace WinFormHttpPost { public partial class Form1 : Form { private Encoding currentEncode = Encoding.GetEncoding("utf-8"); public Form1() { InitializeComponent(); } private void Submit(string url, string user, string pass, string filePath) { string boundary = Guid.NewGuid().ToString(); string beginBoundary = "--" + boundary; string endBoundary = "--" + boundary + "--"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.ContentType = "multipart/form-data; boundary=" + boundary; request.Method = "POST"; request.KeepAlive = true; StringBuilder sbBody = new StringBuilder(); sbBody.AppendLine(beginBoundary); sbBody.AppendLine("Content-Disposition: form-data; name=\"user\""); sbBody.AppendLine(); sbBody.AppendLine(user); sbBody.AppendLine(beginBoundary); sbBody.AppendLine("Content-Disposition: form-data; name=\"pass\""); sbBody.AppendLine(); sbBody.AppendLine(pass); sbBody.AppendLine(beginBoundary); sbBody.AppendLine(string.Format("Content-Disposition: form-data; name=\"myFile\"; filename=\"{0}\"", filePath)); sbBody.AppendLine("Content-Type: application/octet-stream"); sbBody.AppendLine(); byte[] bufferContent = currentEncode.GetBytes(sbBody.ToString()); byte[] bufferFile = GetFileByte(filePath); byte[] bufferEndBoundary = currentEncode.GetBytes("\r\n" + endBoundary); byte[] bufferBody = new byte[bufferContent.Length + bufferFile.Length + bufferEndBoundary.Length]; int startIndex = 0; bufferContent.CopyTo(bufferBody, startIndex); startIndex += bufferContent.Length; bufferFile.CopyTo(bufferBody, startIndex); startIndex += bufferFile.Length; bufferEndBoundary.CopyTo(bufferBody, startIndex); request.ContentLength = bufferBody.Length; using (Stream requestStream = request.GetRequestStream()) { requestStream.Write(bufferBody, 0, bufferBody.Length); } HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream receiveStream = response.GetResponseStream(); StreamReader readStream = new StreamReader(receiveStream, currentEncode); tbResult.Text = readStream.ReadToEnd(); response.Close(); readStream.Close(); } private byte[] GetFileByte(string filePath) { byte[] bufferFileInfo = null; using (FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { bufferFileInfo = new byte[stream.Length]; stream.Read(bufferFileInfo, 0, bufferFileInfo.Length); } return bufferFileInfo; } private void btnSubmit_Click(object sender, EventArgs e) { Submit("http://localhost.:3558/Server.ashx", "abc", "123", "F:\\报表下载清单2.xls"); } } }