跨服务器上传图片
来源:互联网 发布:php服务器怎么绑定域名 编辑:程序博客网 时间:2024/05/16 05:35
1,背景:程序在A服务器上,图片在B图片服务器上
2,客户端上传文件到A服务器上,A服务器,在通过流的方式,将图片发送给B服务器上
服务器A代码
public class UploadImage : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/html"; if (context.Request.Files.Count > 0) { //文件流 var httpfile = context.Request.Files[0]; var stream = httpfile.InputStream; var length = stream.Length; if (length == 0) { throw new Exception("zero file"); } //文件类型 var imageFormat = ImageFormat.Jpeg; switch (ext) { case ".jpg": imageFormat = ImageFormat.Jpeg; break; case ".gif": imageFormat = ImageFormat.Gif; break; case ".png": imageFormat = ImageFormat.Png; break; default: break; } //复制至内存中 var count = (int)stream.Length; var ms = new MemoryStream(); var bytes = new byte[count]; stream.Read(bytes, 0, count); ms.Write(bytes, 0, count); ms.Position = 0; CookieCollection mycookies = null; //上传至图片服务器 var res = PostWebData("http//:www.xxxx.com", ref mycookies, "utf-8", Convert.ToBase64String(ms.ToArray())); //判断是否上传成功..... // 将返回的路劲保存起来 } } /// <summary> /// 向网站Post数据 /// </summary> /// <param name="uri"></param> /// <param name="mycookies"></param> /// <param name="encoding"></param> /// <param name="data"></param> /// <returns></returns> public string PostWebData(string uri, ref CookieCollection mycookies, string encoding, string data) { var encode = getEncoding(encoding); var datas = encode.GetBytes(data); var length = datas.Length; try { //请求 var req = HttpWebRequest.Create(uri) as HttpWebRequest; var cookies = new CookieContainer(); req.KeepAlive = true; req.AllowAutoRedirect = true; req.AllowWriteStreamBuffering = true; req.Credentials = CredentialCache.DefaultCredentials; req.ContentType = "application/x-www-form-urlencoded"; req.Accept = "*/*"; req.Referer = "http://www.lanxe.net/"; req.Timeout = 20000; req.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 2.0.50215; fqSpider)"; req.Method = "POST"; req.ContentLength = length; req.CookieContainer = cookies; //加入额外的Cookie if (mycookies != null) { foreach (Cookie item in mycookies) { cookies.Add(item); } } //发送内容 var stream = req.GetRequestStream(); stream.Write(datas, 0, length); stream.Close(); //获取返回的数据 var res = (HttpWebResponse)req.GetResponse(); mycookies = cookies.GetCookies(req.RequestUri); return getHtml(res, encode); } catch { return null; } } /// <summary> /// 根据名称获取网页编码格式 /// </summary> /// <param name="name"></param> /// <returns></returns> static Encoding getEncoding(string name) { if (string.IsNullOrEmpty(name)) { return Encoding.UTF8; } else if (name.ToLower() == "default") { return Encoding.Default; } else { return Encoding.GetEncoding(name); } } /// <summary> /// 从Response中获取HTML内容 /// </summary> /// <param name="res"></param> /// <param name="encode"></param> /// <returns></returns> static string getHtml(HttpWebResponse res, Encoding encode) { var outs = new StringBuilder(); var stream = res.GetResponseStream(); var reader = new StreamReader(stream, encode); // 每次读取1024 var buffer = new char[1024]; var count = reader.Read(buffer, 0, 1024); while (count > 0) { outs.Append(new String(buffer, 0, count)); count = reader.Read(buffer, 0, 1024); } // 读取完毕 reader.Close(); stream.Close(); return outs.ToString(); } #region IHttpHandler 成员 public bool IsReusable { get { throw new NotImplementedException(); } } #endregion #region IHttpHandler 成员 bool IHttpHandler.IsReusable { get { throw new NotImplementedException(); } } void IHttpHandler.ProcessRequest(HttpContext context) { throw new NotImplementedException(); } #endregion }}服务器端B代码 public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { var stream = Request.InputStream; Encoding myEncoding = Encoding.GetEncoding("utf-8"); byte[] content = new byte[stream.Length]; //将数据流读入到数组 stream.Read(content, 0, content.Length); //将数组转换为string ,并且反base64解码 string str = myEncoding.GetString(content); byte[] buffer = Convert.FromBase64String(str); PutImage(buffer); } public bool PutImage(byte[] ImgIn) { System.IO.MemoryStream ms = new System.IO.MemoryStream(ImgIn); System.Drawing.Image image = System.Drawing.Image.FromStream(ms); image.Save("C:\\Data\\imgs\\4\\yourPic.Png", System.Drawing.Imaging.ImageFormat.Png); return true; } }
0 0
- 跨服务器上传图片
- 跨服务器上传图片win7tolinuix
- FTP跨服务器上传图片(一) 图片服务器配置
- FTP跨服务器上传图片(二)
- jercy实现跨服务器上传图片+回显
- 上传图片至服务器
- android图片上传服务器
- 上传图片至服务器
- 上传图片到服务器
- 上传图片到服务器
- 图片上传到服务器
- 图片上传到服务器
- 图片上传不到服务器
- 图片上传到服务器
- 图片上传服务器fastDFS
- 图片上传服务器-回显
- sturts图片上传到服务器
- Android上传图片至服务器
- 搭建openstack时,出现Request returned failure status. HTTPInternalServerError (HTTP 500) 错误!
- spring :annotation-driven配置事务管理器详解
- 如何连接oracle数据库及故障解决办法
- 高精度计时器
- LearnVSXNow! #8 插曲-regpkg.exe命令
- 跨服务器上传图片
- linux下修改主机名
- HDU 1113(map的使用)
- 获取android多个sd卡路径的方法
- 第二章 链路层 2.2以太网和IEEE 802封装
- POJ 2488 A Knight's Journey
- 图片异步加载
- 这些事,我不作,别人也会作
- LearnVSXNow! #9 - 创建我们第一个工具集-重构为服务