Asp.net上传文件后台通过二进制流发送到其他Url保存

实际情况一般有单独的站点存放静态文件,比如图片、office文档等。A站点的操作需要上传文件到B站点,

下面介绍一种方法通过System.Net.WebClient类的UploadData方法 。

 

uploadFile.aspx html:

<form id="form1" runat="server">

    <div>

        <asp:FileUpload runat="server" ID="fileUp" AllowMultiple="true" /> 

        <asp:Button runat="server" ID="btnLoad" Text="Upload" OnClick="btnLoad_Click" />

    </div>

    </form>

uploadFile.cs 后台代码

 protected void btnLoad_Click(object sender, EventArgs e)

        {

            if (fileUp.HasFile)

            {

                var list = fileUp.PostedFiles;

                foreach (var item in list)

                {

                    string fileDoc = System.IO.Path.GetExtension(item.FileName).ToLower(); //后缀名

                    int fileLength = (int)item.InputStream.Length;//InputStream.Length;



                    byte[] byteFile = new byte[fileLength];

                    item.InputStream.Read(byteFile, 0, fileLength);

                    item.InputStream.Seek(0, System.IO.SeekOrigin.Begin); //读取流之后设置设置当前流的位置,因为md5加密也需要用到该流



                    string md5Value =  Com.MD5.MyMD5.getMd5Hash(item.InputStream); //得到上传文件流的MD5string url = string.Format("http://localhost:4884/SaveFile.ashx?name=" + md5Value + "&ext=" + fileDoc);  //保存流的处理文件路径



                    System.Net.WebClient wc = new System.Net.WebClient();

                    byte[] bts = wc.UploadData(url, "POST", byteFile);

                    wc.Dispose();

                    string filePath = System.Text.Encoding.UTF8.GetString(bts); //获取SaveFile.ashx返回

                }

            }

        }
Com.MD5.MyMD5.getMd5Hash方法请看:我的C# MD5摘要算法、哈希算法

SaveFile.ashx 处理程序

 /// <summary>

    /// SaveFile 的摘要说明

    /// </summary>

    public class SaveFile : IHttpHandler

    {



        public void ProcessRequest(HttpContext context)

        {

            lock (context.Request.InputStream)

            {

                HttpRequest Request = context.Request;

                string path = ""; string filenName = "";

                string re = "";

                if (Request.HttpMethod.ToLower() == "post")

                {

                    try

                    {

                        using (Request.InputStream)

                        {

                            string name = Request["name"];

                            string s = Request["ext"];

                            byte[] bytes = new byte[Request.InputStream.Length];

                            Request.InputStream.Read(bytes, 0, bytes.Length); 

                            Request.InputStream.Seek(0, SeekOrigin.Begin);//设置当前流的位置

                            //Request.InputStream.Position = 0;

                            Request.InputStream.Flush();

                            Request.InputStream.Close();

                            Request.InputStream.Dispose();

                            Random rnd = new Random();

                            int n = rnd.Next(1000, 9999);

                            //filenName = "/file/" + n.ToString() + "-" + DateTime.Now.ToString("yyyyMMddHHmmssss") + s;

                            filenName = "/file/"+name + s;

                            path = context.Server.MapPath(filenName);



                            FileStream fs = new FileStream(path, FileMode.Create);

                            BinaryWriter bw = new BinaryWriter(fs);

                            bw.Write(bytes);

                            bw.Close();

                            fs.Close();

                            re = filenName;



                           //System.Threading.Thread.Sleep(500);

                        }

                    }

                    catch (Exception ex)

                    {

                        

                    }

                }



                context.Response.ContentType = "text/plain";

                context.Response.Write(re);

                context.Response.End();

            }

        }



        public bool IsReusable

        {

            get

            {

                return false;

            }

        }

    }



 
  
 
  


                            

你可能感兴趣的:(asp.net)