分享一个模拟提交带文件的表单的方法
来源:互联网 发布:黑魂3改捏脸数据修改 编辑:程序博客网 时间:2024/05/20 04:48
public string PostFormData(List<FormItem> list, string uri) { string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x"); //请求 WebRequest req = WebRequest.Create(uri); req.Method = "POST"; req.ContentType = "multipart/form-data; boundary=" + boundary; //���织表单数据 StringBuilder sb = new StringBuilder(); foreach (FormItem item in list) { switch (item.ParamType) { case ParamType.Text: sb.Append("--" + boundary); sb.Append("\r\n"); sb.Append("Content-Disposition: form-data; name=\"" + item.Name + "\""); sb.Append("\r\n\r\n"); sb.Append(item.Value); sb.Append("\r\n"); break; case ParamType.File: sb.Append("--" + boundary); sb.Append("\r\n"); sb.Append("Content-Disposition: form-data; name=\"" + item.Name + "\"; filename=\"" + item.Value + "\""); sb.Append("\r\n"); sb.Append("Content-Type: application/octet-stream"); sb.Append("\r\n\r\n"); break; } } string head = sb.ToString(); //post字节总长度 long length = 0; byte[] form_data = Encoding.UTF8.GetBytes(head); //结尾 byte[] foot_data = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n"); List<FormItem> fileList = list.Where(f => f.ParamType == ParamType.File).ToList(); length = form_data.Length + foot_data.Length; foreach (FormItem fi in fileList) { FileStream fileStream = new FileStream(fi.Value, FileMode.Open, FileAccess.Read); length += fileStream.Length; fileStream.Close(); } req.ContentLength = length; Stream requestStream = req.GetRequestStream(); //发送表单参数 requestStream.Write(form_data, 0, form_data.Length); foreach (FormItem fd in fileList) { FileStream fileStream = new FileStream(fd.Value, FileMode.Open, FileAccess.Read); //文件内容 byte[] buffer = new Byte[checked((uint)Math.Min(4096, (int)fileStream.Length))]; int bytesRead = 0; while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) requestStream.Write(buffer, 0, bytesRead); //结尾 requestStream.Write(foot_data, 0, foot_data.Length); } requestStream.Close(); //响应 WebResponse pos = req.GetResponse(); StreamReader sr = new StreamReader(pos.GetResponseStream(), Encoding.UTF8); string html = sr.ReadToEnd().Trim(); sr.Close(); if (pos != null) { pos.Close(); pos = null; } if (req != null) { req = null; } return html; } public string SaveFileFromUrl(string fileName, string url) { WebResponse response = null; Stream stream = null; try { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); response = request.GetResponse(); stream = response.GetResponseStream(); if (!response.ContentType.ToLower().StartsWith("text/")) { SaveBinaryFile(response, fileName); } else { StreamReader sr = new StreamReader(stream, System.Text.Encoding.UTF8); return sr.ReadToEnd(); } } catch (Exception err) { return err.ToString(); } return "complete"; } public bool SaveBinaryFile(WebResponse response, string fileName) { bool value = true; byte[] buffer = new byte[1024]; try { if (System.IO.File.Exists(fileName)) System.IO.File.Delete(fileName); Stream outStream = System.IO.File.Create(fileName); Stream inStream = response.GetResponseStream(); int l; do { l = inStream.Read(buffer, 0, buffer.Length); if (l > 0) outStream.Write(buffer, 0, l); } while (l > 0); outStream.Close(); inStream.Close(); } catch { value = false; } return value; } public class FormItem { public string Name { get; set; } public ParamType ParamType { get; set; } public string Value { get; set; } } public enum ParamType { Text, File }
阅读全文
0 0
- 分享一个模拟提交带文件的表单的方法
- HttpClient4模拟带文件上传的表单提交
- ajax提交带文件的表单
- ajax提交带文件的表单
- 利用socket模拟http的混合表单上传(在一个请求中提交表单并上传多个文件)
- 模拟表单提交的例子
- ajax方式提交带文件上传的表单
- Ajax方式提交带文件上传的表单
- jquery提交带上传文件的form表单
- 使用ajax提交带文件的form表单
- 使用ajax提交不带文件的form表单
- C#模拟提交表单 post-带附件的表单[multipart/form-data]
- C#模拟提交表单 post-带附件的表单[multipart/form-data]
- php Curl 里面模拟表单提交 文本+文件的写法
- 模拟提交有文件上传的表单(通过http模拟上传文件)
- 模拟提交有文件上传的表单(通过http模拟上传文件)
- 表单提交的一个测试
- 将一个表单提交到不同页面的方法
- FastDFS分布式文件系统
- 中继注册问题处理
- git 回滚rollback
- 【bzoj2086】 [Poi2010]Blocks
- Python实现读取目录所有文件的文件名并保存到txt文件代码
- 分享一个模拟提交带文件的表单的方法
- 深度优先遍历
- 元素等待————隐式等待
- ViewPager无限轮播实现
- Android SystemUI状态栏添加图标
- springboot之Starter POMs
- 蛇形填数(方块填数+三角形填数)
- 二分法subsequence
- CentOS下搭建git服务器