跨服务器上传图片

来源:互联网 发布: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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 月经弄到床垫上怎么办 出租房墙面太脏怎么办 苹果6镜头模糊了怎么办 6s前摄像头进灰怎么办 手机镜头进灰了怎么办 6s摄像头进灰了怎么办 7plus摄像头进灰怎么办 苹果喇叭进灰了怎么办 苹果7摄像头进灰怎么办 锁眼里胶水堵了 怎么办 锁眼被牙签堵了怎么办 锁孔被胶水堵了怎么办 快手上不了同城怎么办 昌珉入伍宋茜怎么办 嗓子里卡了鱼刺怎么办 在餐厅吃到虫子怎么办 在餐厅吃出虫子怎么办 孕妇被虫子咬了怎么办 吃外卖吃到虫子怎么办 杯子盖拧错位了怎么办 身边有吸毒的人怎么办 如果牛难产了怎么办要 牛难产拉不出来怎么办 老公发现老婆有外遇怎么办 睡眠不好半夜老是醒怎么办 拔完智齿肿了怎么办 拔牙后咽口水疼怎么办 吃了脏东西拉肚子怎么办 微信遇到仙人跳怎么办 牙有裂痕疼应该怎么办 胸罩在学校掉了怎么办 锁屏密码忘记了怎么办 中汇支付不到账怎么办 痘痘毁容烂脸怎么办 我的手机掉了怎么办 公司不给开工资怎么办 我有卵巢老化怎么办呢 老师骂了我,我该怎么办 我的牙齿很难看怎么办 门牙摔了个缺怎么办 鱼身上鱼鳞烂了怎么办