博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#Post文件上传
阅读量:2051 次
发布时间:2019-04-28

本文共 4406 字,大约阅读时间需要 14 分钟。

上代码:

客户端代码

public static string Upload(string url, string fileName){    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);    request.Method = "POST";    Stream postStream = new MemoryStream();    #region 处理Form表单文件上传    //通过表单上传文件    string boundary = "----" + DateTime.Now.Ticks.ToString("x");    string formdataTemplate = "\r\n--" + boundary + "\r\nContent-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: application/octet-stream\r\n\r\n";    try    {        //准备文件流        using (var fileStream = FileToStream(fileName))        {            var formdata = string.Format(formdataTemplate, "", System.IO.Path.GetFileName(fileName) /*Path.GetFileName(fileName)*/);            var formdataBytes = Encoding.UTF8.GetBytes(postStream.Length == 0 ? formdata.Substring(2, formdata.Length - 2) : formdata);//第一行不需要换行            postStream.Write(formdataBytes, 0, formdataBytes.Length);            //写入文件            byte[] buffer = new byte[1024];            int bytesRead = 0;            while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)            {                postStream.Write(buffer, 0, bytesRead);            }        }    }    catch (Exception ex)    {        throw ex;    }    //结尾    var footer = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n");    postStream.Write(footer, 0, footer.Length);    request.ContentType = string.Format("multipart/form-data; boundary={0}", boundary);    #endregion    request.ContentLength = postStream != null ? postStream.Length : 0;    request.Accept = "*/*";    //request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";    request.KeepAlive = true;    request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36";    #region 输入二进制流    if (postStream != null)    {        postStream.Position = 0;        //直接写入流        Stream requestStream = request.GetRequestStream();        byte[] buffer = new byte[1024];        int bytesRead = 0;        while ((bytesRead = postStream.Read(buffer, 0, buffer.Length)) != 0)        {            requestStream.Write(buffer, 0, bytesRead);        }        postStream.Close();//关闭文件访问    }    #endregion    HttpWebResponse response = (HttpWebResponse)request.GetResponse();    using (Stream responseStream = response.GetResponseStream())    {        using (StreamReader myStreamReader = new StreamReader(responseStream,Encoding.GetEncoding("utf-8")))        {            string retString = myStreamReader.ReadToEnd();            return retString;        }    }}

FileToStream方法,文件转stream

public static Stream FileToStream(string fileName){    // 打开文件    FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);    // 读取文件的 byte[]    byte[] bytes = new byte[fileStream.Length];    fileStream.Read(bytes, 0, bytes.Length);    fileStream.Close();    // 把 byte[] 转换成 Stream    Stream stream = new MemoryStream(bytes);    return stream;}

服务端代码:

public string Upload_File(){    try    {        HttpFileCollection file_list = HttpContext.Current.Request.Files;        if (file_list != null && file_list.Count > 0)        {            string str = string.Empty;            for (int i = 0; i < file_list.Count; i++)            {                HttpPostedFile file = file_list[i];                string type = file.ContentType;//获取文件类型                string FileName = file.FileName;                string guid = "";                if (FileName != null && FileName != "")                {                    string FileType = FileName.Substring(FileName.LastIndexOf(".") + 1);//得到文件的后缀名                    guid = DateTime.Now.ToString("yyyyMMddhhmmss") + FileName;//得到重命名的文件名                    //定义文件存放的目标路径                    string targetDir = HttpContext.Current.Server.MapPath("~/UpLoad/" + DateTime.Now.ToString("yyyy-MM-dd") + "/file");                    //创建目标路径                    Directory.CreateDirectory(targetDir);                    string path = Path.Combine(targetDir, Path.GetFileName(guid));                    file.SaveAs(path);                    str = str + "/UpLoad/" + DateTime.Now.ToString("yyyy-MM-dd") + "/file/" + guid;                }            }            return "上传成功," + str;        }        else            return "文件不存在";    }    catch(Exception ex)    {        return "上传失败," + ex.Message;    }}

 

转载地址:http://auulf.baihongyu.com/

你可能感兴趣的文章
【手机自动化测试】monkey测试
查看>>
【英语】软件开发常用英语词汇
查看>>
Fiddler 抓包工具总结
查看>>
【雅思】雅思需要购买和准备的学习资料
查看>>
【雅思】雅思写作作业(1)
查看>>
【雅思】【大作文】【审题作业】关于同不同意的审题作业(重点)
查看>>
【Loadrunner】通过loadrunner录制时候有事件但是白页无法出来登录页怎么办?
查看>>
【Python】Python 读取csv的某行或某列数据
查看>>
【Loadrunner】平台1.9环境APP成功录制并调试成功后的脚本备份
查看>>
【Loadrunner】性能测试:通过服务器日志获取性能需求
查看>>
【Python】sasa版:文件中csv读取在写入csv读取的数据和执行是否成功。
查看>>
【loadrunner】【scorm学习】demo/test域上进行scorm脚本录制及回放成功脚本备份
查看>>
【Loadrunner】使用LoadRunner上传及下载文件
查看>>
【Loadrunner】使用LR录制HTTPS协议的三种方法
查看>>
【Python+Selenium】猪猪练习成功版:csv文件的输入和输出(运行环境:python3.5版本)...
查看>>
【python】BeautifulSoup的应用
查看>>
【Python】接口自动化测试-Fidder的使用(未完待续……)
查看>>
【Python】自动化测试框架-共通方法汇总
查看>>
【Python】if相关知识点
查看>>
【Python】xpath中为什么粘贴进去代码后老报错?如何在定位元素的时候准确找到定位切入点?...
查看>>