C# 采用HttpWebRequest 自定义头信息 上传文件

刚实习的时候遇到一个问题:上传文件的URL有特定格式限制,需要按格式定义头信息,才能上传成功。查资料时候当时好像是java版本的,C#代码贴上。

//uploadFile:上传文件名    groupId:GUID
public string FileUpload(string uploadFile, string groupId)
{
    //从流中读取字节块并将该数据写入给定缓冲区buffer中
    FileStream fileStream = new FileStream(uploadFile, FileMode.Open, FileAccess.Read);
    Byte[] buffer = new Byte[fileStream.Length];
    fileStream.Read(buffer, 0, Convert.ToInt32(fileStream.Length));

    //boundary setting
    string boundary = "----------" + DateTime.Now.Ticks.ToString("x");
    string fileName = Path.GetFileName(uploadFile);
    string nameOnly = fileName.Substring(0, fileName.LastIndexOf("."));

    Dictionary<string, string> Params = new Dictionary<string, string>();
    Params.Add("name", fileName);
    Params.Add("groupId", groupId);
    Params.Add("appModule", "portal");
    Params.Add("filePath", "");
    Params.Add("thumbnail", "true");
    Params.Add("storeType", "1");
    Params.Add("property1", "");
    Params.Add("property2", "");
    Params.Add("property3", "");
    Params.Add("property4", "");
    Params.Add("property5", "");
    Params.Add("flag", "false");

    StringBuilder sb = new StringBuilder();

    //发送必要字段
    foreach (KeyValuePair<string, string> param in Params)
    {
        sb = sb.Append("--");
        sb = sb.Append(boundary);
        sb = sb.Append("\r\n");
        sb = sb.Append("Content-Disposition: form-data; name=\"" + param.Key + "\"\r\n\r\n");
        sb = sb.Append(param.Value);
        sb = sb.Append("\r\n");
    }

    //要发送的文件
    sb = sb.Append("--");
    sb = sb.Append(boundary);
    sb = sb.Append("\r\n");
    sb = sb.Append("Content-Disposition: form-data; name=\"" + nameOnly + "\"; filename=\"" + fileName + "\"\r\n");
    sb = sb.Append("Content-Type: application/octet-stream\r\n\r\n");

    byte[] data = Encoding.Default.GetBytes(sb.ToString());

    byte[] end_data = Encoding.Default.GetBytes(("\r\n--" + boundary + "--\r\n"));

    Uri uri = new Uri("上传文件地址");

    HttpWebRequest webRequset = (HttpWebRequest)WebRequest.Create(uri);
    webRequset.ContentType = "multipart/form-data; boundary=" + boundary;
    webRequset.Method = "POST";

    //长度属性:头+文件流+尾的长度
    long length = data.Length + buffer.Length + end_data.Length;
    webRequset.ContentLength = length;

    Stream requestStream = webRequset.GetRequestStream();
    //将拼接的数据和文件流写入
    requestStream.Write(data, 0, data.Length);
    requestStream.Write(buffer, 0, buffer.Length);
    requestStream.Write(end_data, 0, end_data.Length);
    //获取返回信息
    WebResponse responce = webRequset.GetResponse();
    Stream responeStream = responce.GetResponseStream();
    StreamReader sr = new StreamReader(responeStream);

    return sr.ReadToEnd();
}
时间: 2024-12-21 23:18:17

C# 采用HttpWebRequest 自定义头信息 上传文件的相关文章

C# 使用HttpWebRequest通过PHP接口 上传文件

1:上传文件实例 public void UploadXMLLog(string xmlpath)        {            NameValueCollection nvc = new NameValueCollection();            CookieContainer cookies = new CookieContainer();            nvc.Add("", “”);            ......            strin

文件上传控件-如何上传文件-大文件断点续传

需求: 项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在20G内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以20G来进行限制. PC端全平台支持,要求支持Windows,Mac,Linux 支持所有浏览器. 支持文件批量上传 支持文件夹上传,且要求在服务端保留层级结构.文件夹数量要求支持到10W. 支持大文件断点续传,要求刷新浏览器,重启浏览器,重启电脑后仍然能够继续上传.文件大小要求能够支持到20个G. 支持自动加载本地文件,要求能够自动加载指定的本地文件.

上传文件 从相机、图库获取与截取图片

Activity /**实际开发涉及文件上传.下载都不会自己写这些代码,一般会集成第三方库来完成,比如android-async-http,okhttp,xUtils等*/ public class UploadFileActivity extends ListActivity {     private ImageView imageView;     private TextView tv_info;     public static final int uid = 10415362;  

Jmeter_针对一个账户批量上传文件

之前分享了上传一个文件,批量上传多个文件,把文件名字,大小,路径参数化,实现即可 操作如下: 举例上传2个文件 1.创建文件 2.线程组,因为是2个文件上传,要运行2次 3. HTTP请求值 4.因为登录只需要运行一次就够了,添加一个 仅一次控制器 5.登录按照需求文档添加信息头 6.使用正则表达式获取token 7.上传文件-Http请求,fileName,fileSize参数化 8.HTTP请求头,需求文档要求上传文件添加信息头 9.上传文件 10,查看结果树 原文地址:https://ww

libcurl上传文件,添加自定义头

原文  http://www.cnblogs.com/meteoric_cry/p/4285881.html 主题 curl libcurl参数很多,一不小心就容易遇到问题.曾经就遇到过一个很蛋疼的问题:libcurl断点下载>> 这里主要汇总一下,libcurl上传的二种方式: 1.直接上传文件,类似form表单<input type=”file” />,<form enctype=”multipart/form-data”…: 2.上传二进制流: 至于设定自定义头,都是使

HttpWebRequest上传文件(Excel等)

//上传代码/// <summary> /// 文件上传 /// </summary> /// <param name="strAddress">路径地址,不包括服务地址</param> /// <param name="postedFile"></param> /// <returns></returns> public static IResponseResult H

关于HttpWebRequest上传文件

我们web 操作离不开 http请求响应 HttpWebRequest上传文件也是一样的道理 下面码一些代码: private void UploadFile(string strRequestUri, string strCookie, string filename) { // 初始化HttpWebRequest HttpWebRequest httpRequest = (HttpWebRequest)HttpWebRequest.Create(strRequestUri); // 封装Co

采用HttpClient3.x上传文件 spring 文件上传

最近,项目需要调用第三方的系统上传图片,在长传图片的同时,还需要携带其他的请求参数:整体的流程是:网页---->spring mvc--->业务处理---->调用第三方系统上传图片: 在此期间遇到的问题是:在调用第三方系统上传图片时,除了图片文件参数外,其他参数期望通过request.getParameter()方法能够访问到,采用了很多方式,都不行,最终通过不断的尝试,测试成功,特贡献出来供需要的人员参考! 采用spring 的MultipartFile进行文件上传,代码如下     

Drupal创建自定义表单,上传文件代码

Drupal中创建自定义表单,用来上传文件,对上传文件做一些操作.以下是放在Module中的代码: 一.菜单建立表单路径 /** Implementation of hook_menu(). */ function moduleName_menu () { $items = array(); $items['admin/import'] = array( 'title' => 'title', 'page callback' => 'drupal_get_form', 'page argume