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;
            }
        }
    }

HttpFileCollection:

   void save(HttpRequest Request)
        {
            var file = Request.Files[0];
            var filenName = "/file/" + file.FileName;
            var path = HttpContext.Current.Server.MapPath(filenName);
            file.SaveAs(path);
        }

 

 
        
 
        
 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM