卜若的程式碼筆記系列-Web系列-SpringBoot-第九章:使用c#上傳表單-3209
1.首先,c#向web服務上傳資料其實是通過一個 HttpWebRequest物件,這個物件不是通過new出來的,是通過建立url連線產生的物件,我們可以這樣
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; //url指的是你請求的伺服器路由,比如我這個: http://localhost:8080/file/save
它是伺服器裡面負責解決提交資料的策略 @RestController @RequestMapping("/file") public class FileController { @PostMapping(value ="/save") public void outSave() throws IOException { ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes(); HttpServletRequest request = servletRequestAttributes.getRequest(); HttpServletResponse response = servletRequestAttributes.getResponse(); int len = request.getContentLength(); System.out.println(request.getContentType()+request.getParameter("author")); } }
我們通過這個物件可以向伺服器寫流,然後伺服器可以接收到這些流。
我們可以通過 Stream stream = request.GetRequestStream();
stream.Write(data, 0, data.Length); 向伺服器直接寫資料,然後伺服器就能夠接收到,實際上,這兩句程式碼下面代表著非常複雜的傳輸底層,然而,身為web程式設計師,其實 絕大部分情況下我們並不需要關心,你只需要知道可以通過這種方式將資料上傳到伺服器就行了。
接下來,我們需要準備資料
我們通過一個字典來儲存我們的資料,但是將字典的資料組裝字串並且write給伺服器時,我們需要注意一個細節 資料的分隔符使用"&" 這個分隔符是srpingboot它自帶的一個request.getParameter("arg");約定的分隔符。
我們來看我們組裝的格式
string buffer = "";
foreach (string key in parameters.Keys) { buffer += key + "=" + parameters[key] + "&"; } 這種格式其實是仿照json來的,這裡不做詳細贅述 接下來,通過utf-8編碼將資料編碼成byte流 byte[] data = Encoding.UTF8.GetBytes(buffer); 然後write。就能實現表單的傳輸 完整的程式碼: public static HttpWebResponse CreatePostHttpResponse(string url, IDictionary<string, string> paraDic) { HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; string buffer = ""; foreach (string key in paraDic.Keys) { buffer += key + "=" + paraDic[key] + "&"; } byte[] data = Encoding.UTF8.GetBytes(buffer); Stream stream = request.GetRequestStream(); stream.Write(data, 0, data.Length); return request.GetResponse() as HttpWebResponse; }
測試:
static void Main(string[] args) { IDictionary<string, string> parameters = new Dictionary<string, string>(); parameters.Add("author", "你是傻逼"); parameters.Add("author1", "你是傻逼"); HttpWebResponse response = Program.CreatePostHttpResponse("http://localhost:8080/file/save", parameters); } 結果: 圖片: