C# 通过http post 请求上传图片和参数

一、C# Winform或控制台


        /// <summary>
        /// 通过http上传图片及传参数
        /// </summary>
        /// <param name="imgPath">图片地址(绝对路径:D:\demo\img\123.jpg)</param>
        public void UploadImage(string imgPath)
        {
            var uploadUrl = "http://localhost:3020/upload/imgup";
            var dic = new Dictionary<string, string>() {
                    {"para1",1.ToString() },
                    {"para2",2.ToString() },
                    {"para3",3.ToString() },
                };
            var postData = Utils.BuildQuery(dic);//转换成:para1=1&para2=2&para3=3
            var postUrl = string.Format("{0}?{1}", uploadUrl, postData);//拼接url
            HttpWebRequest request = WebRequest.Create(postUrl) as HttpWebRequest;
            request.AllowAutoRedirect = true;
            request.Method = "POST";

            string boundary = DateTime.Now.Ticks.ToString("X"); // 随机分隔线
            request.ContentType = "multipart/form-data;charset=utf-8;boundary=" + boundary;
            byte[] itemBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "\r\n");
            byte[] endBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n");

            int pos = imgPath.LastIndexOf("\\");
            string fileName = imgPath.Substring(pos + 1);

            //请求头部信息
            StringBuilder sbHeader = new StringBuilder(string.Format("Content-Disposition:form-data;name=\"file\";filename=\"{0}\"\r\nContent-Type:application/octet-stream\r\n\r\n", fileName));
            byte[] postHeaderBytes = Encoding.UTF8.GetBytes(sbHeader.ToString());

            FileStream fs = new FileStream(imgPath, FileMode.Open, FileAccess.Read);
            byte[] bArr = new byte[fs.Length];
            fs.Read(bArr, 0, bArr.Length);
            fs.Close();

            Stream postStream = request.GetRequestStream();
            postStream.Write(itemBoundaryBytes, 0, itemBoundaryBytes.Length);
            postStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
            postStream.Write(bArr, 0, bArr.Length);
            postStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length);
            postStream.Close();

            HttpWebResponse response = request.GetResponse() as HttpWebResponse;
            Stream instream = response.GetResponseStream();
            StreamReader sr = new StreamReader(instream, Encoding.UTF8);
            string content = sr.ReadToEnd();
        }

 二、图片接收接口

     [ValidateInput(false)]
        public JsonResult imgup(string para1,string para2,string para3)
        {
            if (Request.Files.Count > 0)
            {
                //传过来的图片
                var file = Request.Files[0];
                //保存到本地或服务器

            }
            return new JsonResult { };
        }

原文地址:https://www.cnblogs.com/pingming/p/8550802.html

时间: 2024-10-12 11:03:31

C# 通过http post 请求上传图片和参数的相关文章

(二)Asp.net web api中的坑-【http get请求中的参数】

webapi主要的用途就是把[指定的参数]传进[api后台],api接收到参数,进行[相应的业务逻辑处理],[返回结果].所以怎么传参,或者通俗的说,http请求应该怎么请求api,api后台应该怎么写,才能准确的接收到参数. HttpGet 请求 1.get请求,单参数 前端ajax var url = 'api/EnterOrExit/test';       var para = {};       para["Phone"] = "phone13880825221&q

(三)Asp.net web api中的坑-【http post请求中的参数】

接上篇, HttpPost 请求 1.post请求,单参数 前端 var url = 'api/EnterOrExit/GetData2'; var para = {}; para["Phone"] = "phone13880825221"; para["UID"] = "uid287572292"; $.post(url, para, function () { }, "application/json"

Web APi之捕获请求原始内容的实现方法以及接受POST请求多个参数多种解决方案(十四)

前言 我们知道在Web APi中捕获原始请求的内容是肯定是很容易的,但是这句话并不是完全正确,前面我们是不是讨论过,在Web APi中,如果对于字符串发出非Get请求我们则会出错,为何?因为Web APi对于简单的值不能很好的映射.之前我们谈论过请求内容注意事项问题,本节我们将更加深入的来讨论这个问题,我们会循序渐进进行探讨,并给出可行的解决方案,.细细品,定让你收货多多! 捕获请求原始内容实现方法 捕获复杂属性值 Web APi对于复杂属性值以JSON或者XML的形式成功发送到服务器,基于这点

为每个请求链接加上参数paramId

代码: //  /**   * 为每个请求链接加上参数paramId   * 注释:只有GET方法可在链接后使用?paramId=adfa_232,POST不可以   */   HttpServletRequest request=(HttpServletRequest) servletrequest;    HttpServletResponse response=(HttpServletResponse) servletresponse;       //获取上一步的请求链接   Strin

EBS查找运行请求时间,参数等

--查找运行请求时间,参数等(可以是某用户的,某个报表) select c.user_name, papf.full_name, b.user_concurrent_program_name, a.request_date, a.argument_text, (a.actual_completion_date - a.actual_start_date) * 24 * 60 minutes, a.actual_start_date, a.actual_completion_date, a.req

Struts2Action请求转发以及参数 拦截器传递参数

@Result(name = "fail", type = "redirectAction", location = "gotologin.do?loginUrl=${loginUrl}&errorstr=${errorstr}") //Action请求转发以及参数 拦截器传递参数 ActionContext ac = invocation.getInvocationContext();ValueStack stack = ac.getV

Django怎么获取get请求里面的参数

获取get请求里面参数的两种方法之三种写法一,当get网址是127.0.0.1:8000/info/?id=20&s_id=30这种类型的网址时 我们在urls的路由的urlpatterns里面里面这样定义路由 url(r'info/$',views.info),那么我们怎么把参数取出来呢 因为我们调用的是views里面的info函数,所以我们可以这样获取到 通过request.GET获取请求携带的参数 def info(request): if request.method=='GET': I

Django之get请求url的参数

当get网址是127.0.0.1:8000/mysite10这种类型的网址时 有两种方法: 1,在urls的路由的urlpatterns里面这样定义路由 re_path('^mysite(\d+)$',mysite), views里面的mysite函数取值是这样的: def mysite(request,id): 2, 在urls的路由的urlpatterns里面这样定义路由 re_path(mysite(?P<a>\d+)$',mysite), views里面的mysite函数取值是这样的:

jquery中的ajax请求用法以及参数详情

url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如put和 delete也可以使用,但仅部分浏览器支持. timeout: 要求为Number类型的参数,设置请求超时时间(毫秒).此设置将覆盖$.ajaxSetup()方法的全局设 置. async:要求为Boolean类型的参数,默认设置为true,所有请求均为异步请求. 如果需要发送同步请求,请将此选项