over 9 years ago
Hi, Some times we need to upload files on a web server using HttpWebRequest.
For that first we need to define a model (class) that represents the uploaded file property.
- public class UploadFile
- {
- public string Name { get; set; }
- public string Filename { get; set; }
- public string ContentType { get; set; }
- public Stream Stream { get; set; }
- }
public class UploadFile { public string Name { get; set; } public string Filename { get; set; } public string ContentType { get; set; } public Stream Stream { get; set; } }
Use below sample code for uploading files using httpWebRequest.
- public byte[] UploadFilesToServer(string address, IEnumerable
files, NameValueCollection values) - {
- var request = WebRequest.Create(address);
- request.Method = "POST";
- var boundary = "---------------------------" + DateTime.Now.ToString("a", NumberFormatInfo.InvariantInfo);
- request.ContentType = "multipart/form-data; boundary=" + boundary;
- boundary = "--" + boundary;
- using (var requestStream = request.GetRequestStream())
- {
- // Write the values
- foreach (string name in values.Keys)
- {
- var buffer = Encoding.ASCII.GetBytes(boundary + Environment.NewLine);
- requestStream.Write(buffer, 0, buffer.Length);
- buffer = Encoding.ASCII.GetBytes(string.Format("Content-Disposition: form-data; name=\"{0}\"{1}{1}", name, Environment.NewLine));
- requestStream.Write(buffer, 0, buffer.Length);
- buffer = Encoding.UTF8.GetBytes(values[name] + Environment.NewLine);
- requestStream.Write(buffer, 0, buffer.Length);
- }
- // Write the files
- foreach (var file in files)
- {
- var buffer = Encoding.ASCII.GetBytes(boundary + Environment.NewLine);
- requestStream.Write(buffer, 0, buffer.Length);
- buffer = Encoding.UTF8.GetBytes(string.Format("Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"{2}", file.Name, file.Filename, Environment.NewLine));
- requestStream.Write(buffer, 0, buffer.Length);
- buffer = Encoding.ASCII.GetBytes(string.Format("Content-Type: {0}{1}{1}", file.ContentType, Environment.NewLine));
- requestStream.Write(buffer, 0, buffer.Length);
- file.Stream.CopyTo(requestStream);
- buffer = Encoding.ASCII.GetBytes(Environment.NewLine);
- requestStream.Write(buffer, 0, buffer.Length);
- }
- var boundaryBuffer = Encoding.ASCII.GetBytes(boundary + "--");
- requestStream.Write(boundaryBuffer, 0, boundaryBuffer.Length);
- }
- using (var response = request.GetResponse())
- using (var responseStream = response.GetResponseStream())
- using (var stream = new MemoryStream())
- {
- responseStream.CopyTo(stream);
- return stream.ToArray();
- }
- }
public byte[] UploadFilesToServer(string address, IEnumerablefiles, NameValueCollection values) { var request = WebRequest.Create(address); request.Method = "POST"; var boundary = "---------------------------" + DateTime.Now.ToString("a", NumberFormatInfo.InvariantInfo); request.ContentType = "multipart/form-data; boundary=" + boundary; boundary = "--" + boundary; using (var requestStream = request.GetRequestStream()) { // Write the values foreach (string name in values.Keys) { var buffer = Encoding.ASCII.GetBytes(boundary + Environment.NewLine); requestStream.Write(buffer, 0, buffer.Length); buffer = Encoding.ASCII.GetBytes(string.Format("Content-Disposition: form-data; name=\"{0}\"{1}{1}", name, Environment.NewLine)); requestStream.Write(buffer, 0, buffer.Length); buffer = Encoding.UTF8.GetBytes(values[name] + Environment.NewLine); requestStream.Write(buffer, 0, buffer.Length); } // Write the files foreach (var file in files) { var buffer = Encoding.ASCII.GetBytes(boundary + Environment.NewLine); requestStream.Write(buffer, 0, buffer.Length); buffer = Encoding.UTF8.GetBytes(string.Format("Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"{2}", file.Name, file.Filename, Environment.NewLine)); requestStream.Write(buffer, 0, buffer.Length); buffer = Encoding.ASCII.GetBytes(string.Format("Content-Type: {0}{1}{1}", file.ContentType, Environment.NewLine)); requestStream.Write(buffer, 0, buffer.Length); file.Stream.CopyTo(requestStream); buffer = Encoding.ASCII.GetBytes(Environment.NewLine); requestStream.Write(buffer, 0, buffer.Length); } var boundaryBuffer = Encoding.ASCII.GetBytes(boundary + "--"); requestStream.Write(boundaryBuffer, 0, boundaryBuffer.Length); } using (var response = request.GetResponse()) using (var responseStream = response.GetResponseStream()) using (var stream = new MemoryStream()) { responseStream.CopyTo(stream); return stream.ToArray(); } }
0 Comment(s)