1. 程式人生 > >卜若的程式碼筆記系列-Web系列-SpringBoot-第九章:使用c#上傳表單-3209

卜若的程式碼筆記系列-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);                    }          結果: 圖片: