利用HttpWebRequest实现实体对象的上传
一 简介
HttpWebRequest和HttpWebResponse类是用于发送和接收HTTP数据的最好选择。它们支持一系列有用的属性。这两个类位 于System.Net命名空间,默认情况下这个类对于控制台程序来说是可访问的。请注意,HttpWebRequest对象不是利用new关键字通过构 造函数来创建的,而是利用工厂机制(factory mechanism)通过Create()方法来创建的。另外,你可能预计需要显式地调用一个“Send”方法,实际上不需要。接下来调用 HttpWebRequest.GetResponse()方法返回的是一个HttpWebResponse对象。你可以把HTTP响应的数据流 (stream)绑定到一个StreamReader对象,然后就可以通过ReadToEnd()方法把整个HTTP响应作为一个字符串取回。也可以通过 StreamReader.ReadLine()方法逐行取回HTTP响应的内容。
二 场景
就像上面所说的那样这两个对象的传输都是以流的方式在网络中传输的,如果我想要从客户端向服务器发送一个实体对象的数据该怎么解决呢?可能有的人说使用wcf等通信技术,但是对于我的应用场景来说有点小题大做,于是在网上找了点资料,实现了基于HttpWebReques的数据对象的传输。
三 具体实现
首先,创建需要传输的实体类PostParameters,这个实体类中有两个属性,一个是要传输的文件的文件流,另一个是文件路径(当然,因为我的需求是要上传图片的,没有做过多的扩展,后缀名,文件格式等的需求,可以根据自己的需求去做扩展)
public class PostParameters{// public string Name { get; set; }public Stream FStream { get; set; }public string Path { get; set; }}
下面是客户端的代码,利用HttpWebRequest传输实体对象数据
using System; using System.IO; using System.Linq; using System.Net; using System.Text; using Newtonsoft.Json;namespace AshxRequestTest {internal class Program{private static void Main(string[] args){PostJson("http://uploadimg.zhtx.com/UploadImagHandle.ashx", new PostParameters{Path = "hahah"});}private static void PostJson(string uri, PostParameters postParameters){string postData = JsonConvert.SerializeObject(postParameters); //将对象序列化byte[] bytes = Encoding.UTF8.GetBytes(postData); //转化为数据流var httpWebRequest = (HttpWebRequest) WebRequest.Create(uri); //创建HttpWebRequest对象httpWebRequest.Method = "POST";httpWebRequest.ContentLength = bytes.Length;httpWebRequest.ContentType = "text/xml";using (Stream requestStream = httpWebRequest.GetRequestStream()){requestStream.Write(bytes, 0, bytes.Count()); //输出流中写入数据 }var httpWebResponse = (HttpWebResponse) httpWebRequest.GetResponse(); //创建响应对象if (httpWebResponse.StatusCode != HttpStatusCode.OK) //判断响应状态码 {string message = String.Format("POST failed. Received HTTP {0}", httpWebResponse.StatusCode);throw new ApplicationException(message);}}} }
注释写的很清楚,
下面是服务端的代码:
using System; using System.IO; using System.Text; using System.Web; using Newtonsoft.Json;namespace HttpWebClientTest {/// <summary>/// UploadImagHandle 的摘要说明/// create by peng.li 2015-5-30/// </summary>public class UploadImagHandle : IHttpHandler{public void ProcessRequest(HttpContext context){context.Response.ContentType = "text/xml";HandleMethod();// context.Response.Write("Hello World"); }public bool IsReusable{get { return false; }}private static void HandleMethod(){HttpContext httpContext = HttpContext.Current;Stream httpRStream = httpContext.Request.InputStream;var bytes = new byte[httpRStream.Length];httpRStream.Read(bytes, 0, bytes.Length); //读取请求流对象string req = Encoding.Default.GetString(bytes); //转换成字符串对象(这个字符串是json格式的)var postParameters = JsonConvert.DeserializeObject<PostParameters>(req); //(反序列化)int res = UploadImage(postParameters);httpContext.Response.Write(res);}public static int UploadImage(PostParameters postParameters){string path = "E:/" + postParameters.Path;try{if (!Directory.Exists(Path.GetDirectoryName(path))){Directory.CreateDirectory(Path.GetDirectoryName(path));}File.WriteAllBytes(path, postParameters.FileByte);return 1;}catch (Exception){return 0;}}} }
这只是一个小的demo,希望能够起到抛砖引玉的作用,当然有表达错误的地方,也希望大家能指出来,一块学习,一块进步。
本人的.NET学习技术交流群:226704167
另附上demo下载链接:http://files.cnblogs.com/files/lip0121/HttpWebClientTestPostJson.rar
转载于:https://www.cnblogs.com/lip0121/p/4539801.html
利用HttpWebRequest实现实体对象的上传相关推荐
- php 输出图片给js,如何在php中利用croppic.js对图片进行剪切并上传
如何在php中利用croppic.js对图片进行剪切并上传 发布时间:2021-01-30 16:41:02 来源:亿速云 阅读:92 作者:Leah 这篇文章将为大家详细讲解有关如何在php中利用c ...
- 利用Socketserver实现简单的文件上传
利用Socketserver实现简单的文件上传 server.py #!/usr/bin/env python #coding:utf-8 import SocketServer import os ...
- 腾讯云产品系列(一)COS对象存储上传
腾讯云COS对象存储上传 前言 一.COS对象存储是什么? 二.COS对象存储能做什么? 1.图文介绍流程 2.简单介绍 三.COS对象存储怎么使用? 1.准备工作 2.本文引用javaSDK版本示例 ...
- php iframe 上传图片,利用iframe+php实现图片的上传
1.在文件提交的页面html加上一个隐藏的框架iframe: 然后把表单提交到后台的php文件的运行框架设置在隐藏的框架中,实现无刷新页面的上传. 具体代码如下: Document $(functio ...
- iOS 利用AFNetworking实现大文件分片上传
概述 一说到文件上传,想必大家都并不陌生,更何况是利用AFNetworking(PS:后期统称AF)来做,那更是小菜一碟.比如开发中常见的场景:头像上传,九宫格图片上传...等等,这些场景无一不使用到 ...
- javascript --- [FormData的使用] 表单元素转换成表单 对象二进制文件上传
1. FormData的作用 1.1 将Form表单元素,转换成表单对象 在使用Ajax进行表单提交的时候,采用原生的js获取dom,然后添加属性.当表单项很多的时候,代码会很多.不利于后期阅读.维护 ...
- Go 如何利用multipart/form-data实现文件的上传与下载
转载地址:https://mp.weixin.qq.com/s/OHzXxfcBaf5RNT4dA38LCQ 1. Form简介 Form(中文译为表单)[1],是HTML标记语言中的重要语法元素.一 ...
- 阿里云对象存储上传文件
1.登录阿里云官网 阿里云-上云就上阿里云 2.点击产品,找到对象存储OSS,点击进去 3.如果首次使用,下面可能显示立即购买或者折扣套餐,点击进去购买.如果已经购买,则跳到第5步 4.使用默认选项即 ...
- 解决利用<input type=“file“>上传文件时,value拿到的是fakePath问题
问题:上传文件之后,直接获取input.value是fakePath路径,因此不能通过此路径访问到文件 解决方案: 若不想修改系统配置,可利用js代码解决 oInputFile.onchange = ...
最新文章
- Python环境的安装(Anaconda+Jupyter notebook+Pycharm)
- 聚类分析和主成分分析
- golang中的优雅中止
- 如何控制C#Socket的连接超时时间
- No Team Selected:A team must be selected to run 'ProjectName' on iPhoneName
- 命令前面加一个!的意思如!python
- liunx系统内核安装图形化界面
- java web编写计算器_javaWeb 使用 jsp 和 javaBean 实现计算器功能
- 计算机专业女兵,陈豪2010《点解阿Sir》剧照
- Java SQL解析引擎简介
- Java中代码块和继承
- 使用 json-server 作为 mock 数据
- python中关于命名的例子_Python()-类命名空间和对象/实例命名空间
- JAVA程序打包成exe文件详细图解
- Thinkphp5命名规范
- Wishbone总线
- 区块链技术在银行业的应用
- python之Continuity循环
- 用html制作一个网站的步骤,新手怎么做网页 新手如何制作一个网页
- html鼠标经过晃动代码,css3让div随鼠标移动而抖动起来