c# - Upload pdf with parametrs HTTPWebrequest -
c# - Upload pdf with parametrs HTTPWebrequest -
i want upload pdf parameters:
string[] file = {"c:\test.pdf"}; string filename = "test.pdf"; string processid = "myid"; string document = result; string url = "serviceurl";
and there illustration of using :
namevaluecollection nvc = new namevaluecollection(); nvc.add("filename", filename); nvc.add("processid", processid); nvc.add("document", result); httpupload.uploadfilestoremoteurl(url, file, "file", nvc);
took above code , fixed because throws internal server error 500. there problems \r\n badly positioned , spaces etc. applied refactoring memory stream, writing straight request stream. here result:
public static void uploadfilestoremoteurl(string url, string[] files, string logpath, namevaluecollection nvc) { long length = 0; string boundary = "----------------------------" + datetime.now.ticks.tostring("x"); httpwebrequest httpwebrequest2 = (httpwebrequest)webrequest.create(url); httpwebrequest2.contenttype = "multipart/form-data; boundary=" + boundary; httpwebrequest2.method = "post"; httpwebrequest2.keepalive = true; httpwebrequest2.credentials = system.net.credentialcache.defaultcredentials; stream memstream = new system.io.memorystream(); byte[] boundarybytes = system.text.encoding.ascii.getbytes("\r\n--" + boundary + "\r\n"); string formdatatemplate = "\r\n--" + boundary + "\r\ncontent-disposition: form-data; name=\"{0}\";\r\n\r\n{1}"; foreach (string key in nvc.keys) { string formitem = string.format(formdatatemplate, key, nvc[key]); byte[] formitembytes = system.text.encoding.utf8.getbytes(formitem); memstream.write(formitembytes, 0, formitembytes.length); } memstream.write(boundarybytes, 0, boundarybytes.length); string headertemplate = "content-disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n content-type: application/octet-stream\r\n\r\n"; (int = 0; < files.length; i++) { string header = string.format(headertemplate, "file" + i, files[i]); byte[] headerbytes = system.text.encoding.utf8.getbytes(header); memstream.write(headerbytes, 0, headerbytes.length); filestream filestream = new filestream(files[i], filemode.open, fileaccess.read); byte[] buffer = new byte[1024]; int bytesread = 0; while ((bytesread = filestream.read(buffer, 0, buffer.length)) != 0) { memstream.write(buffer, 0, bytesread); } memstream.write(boundarybytes, 0, boundarybytes.length); filestream.close(); } httpwebrequest2.contentlength = memstream.length; stream requeststream = httpwebrequest2.getrequeststream(); memstream.position = 0; byte[] tempbuffer = new byte[memstream.length]; memstream.read(tempbuffer, 0, tempbuffer.length); memstream.close(); requeststream.write(tempbuffer, 0, tempbuffer.length); requeststream.close(); webresponse webresponse2 = httpwebrequest2.getresponse(); stream stream2 = webresponse2.getresponsestream(); streamreader reader2 = new streamreader(stream2); webresponse2.close(); httpwebrequest2 = null; webresponse2 = null; }
c# upload httpwebrequest
Comments
Post a Comment