C # WinForm uploading multiple files and data
Public Static classHttphelper {Private Static ReadOnlyEncoding Defaultencode =Encoding.UTF8; /// <summary> ///Httpuploadfile/// </summary> /// <param name= "url" ></param> /// <param name= "file" ></param> /// <param name= "Data" ></param> /// <returns></returns> Public Static stringHttpuploadfile (stringUrlstringfile, NameValueCollection data) { returnhttpuploadfile (URL, file, data, Defaultencode); } /// <summary> ///Httpuploadfile/// </summary> /// <param name= "url" ></param> /// <param name= "file" ></param> /// <param name= "Data" ></param> /// <param name= "encoding" ></param> /// <returns></returns> Public Static stringHttpuploadfile (stringUrlstringfile, NameValueCollection data, Encoding Encoding) { returnHttpuploadfile (URL,New string[] {file}, data, encoding); } /// <summary> ///Httpuploadfile/// </summary> /// <param name= "url" ></param> /// <param name= "Files" ></param> /// <param name= "Data" ></param> /// <returns></returns> Public Static stringHttpuploadfile (stringUrlstring[] files, namevaluecollection data) { returnhttpuploadfile (URL, files, data, defaultencode); } /// <summary> ///Httpuploadfile/// </summary> /// <param name= "url" ></param> /// <param name= "Files" ></param> /// <param name= "Data" ></param> /// <param name= "encoding" ></param> /// <returns></returns> Public Static stringHttpuploadfile (stringUrlstring[] files, namevaluecollection data, Encoding Encoding) { stringBoundary ="---------------------------"+ DateTime.Now.Ticks.ToString ("x"); byte[] boundarybytes = Encoding.ASCII.GetBytes ("\r\n--"+ Boundary +"\ r \ n"); byte[] endbytes = Encoding.ASCII.GetBytes ("\r\n--"+ Boundary +"--\r\n"); //1.HttpWebRequestHttpWebRequest request =(HttpWebRequest) webrequest.create (URL); Request. ContentType="multipart/form-data; boundary="+boundary; Request. Method="POST"; Request. KeepAlive=true; Request. Credentials=CredentialCache.DefaultCredentials; using(Stream stream =request. GetRequestStream ()) {//1.1 Key/value stringFormdatatemplate ="content-disposition:form-data; name=\ "{0}\" \r\n\r\n{1}"; if(Data! =NULL) { foreach(stringKeyinchdata. Keys) {stream. Write (Boundarybytes,0, Boundarybytes. Length); stringFormitem =string. Format (Formdatatemplate, Key, Data[key]); byte[] Formitembytes =encoding. GetBytes (Formitem); Stream. Write (Formitembytes,0, Formitembytes. Length); } } //1.2 File stringHeaderTemplate ="content-disposition:form-data; name=\ "{0}\"; filename=\ "{1}\" \r\ncontent-type:application/octet-stream\r\n\r \ n"; byte[] buffer =New byte[4096]; intBytesread =0; for(inti =0; I < files. Length; i++) {stream. Write (Boundarybytes,0, Boundarybytes. Length); stringHeader =string. Format (HeaderTemplate,"file"+I, Path.getfilename (Files[i])); byte[] Headerbytes =encoding. GetBytes (header); Stream. Write (Headerbytes,0, Headerbytes. Length); using(FileStream FileStream =NewFileStream (Files[i], FileMode.Open, FileAccess.Read)) { while(Bytesread = filestream.read (buffer,0, buffer. Length))! =0) {stream. Write (Buffer,0, Bytesread); } } } //1.3 Form EndStream. Write (Endbytes,0, Endbytes. Length); } //2.WebResponseHttpWebResponse response =(HttpWebResponse) request. GetResponse (); using(StreamReader stream =NewStreamReader (response. GetResponseStream ())) {returnStream. ReadToEnd (); } } }
File too Large solution:
Modify the server configuration file, Web. config:
Add to
"Ten"Maxrequestlength="51200"useFullyQualifiedRedirectUrl="true"minfreethreads="8"minLocalRequestFreeThreads="4"apprequestqueuelimit=" -"Enableversionheader="true"/>
C # WPF ASP. Upload Multiple files and data