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


				
时间: 2024-08-25 22:23:42

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

ASP.NET上传文件的几种方法

//上传文件实例 if (fileDealer.HasFile)//判断文件是否存在        {            string filepath = "";            try            {                string path = fileDealer.FileName;                string filename = path.Split('.')[0] + "_" + DateTime.Now

ASP.NET上传文件并记录到数据库

ASP.NET上传文件并记录到数据库 (2011-07-19 11:02:07) 转载▼ 标签: 杂谈 分类: asp.net学习 using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebC

ASP.NET 上传文件以及点击下载

需求说明: 实际项目中,有必要上传附件(包括图片.文档.解压文件等)对数据库数据完善,这里实现的功能就是,上传附件到数据库,然后从数据读出来之后,可以"点击下载"之前上传的附件内容. asp.net代码如下: //用FileUpload控件,上传附件之后,导入数据库操作 protected void btnUp_Click(object sender, EventArgs e) { DbSql db = new DbSql(); //数据操作类 string fileName = &q

Asp.Net:上传文件

Asp.Net中很方便就能做个上传,例如做一个图片的上传: <asp:FileUpload ID="picUpload" runat="server" /> <asp:Button ID="btnUpload" runat="server" Text="上传" CssClass="btn" onclick="btnUpload_Click" Caus

朋友封装的一个ASP.NET上传文件的方法

自我感觉封装得还不错!!! 代码如下: C#代码   #region 上传文件的方法 /// <summary> /// 上传文件方法 /// </summary> /// <param name="myFileUpload">上传控件ID</param> /// <param name="allowExtensions">允许上传的扩展文件名类型,如:string[] allowExtensions = 

朋友封装的一个ASP.NET上传文件的方法(转)

#region 上传文件的方法 /// <summary> /// 上传文件方法 /// </summary> /// <param name="myFileUpload">上传控件ID</param> /// <param name="allowExtensions">允许上传的扩展文件名类型,如:string[] allowExtensions = { ".doc", ".

asp.net上传文件夹的解决方案

以ASP.NET Core WebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API ,包括文件的上传和下载. 准备文件上传的API #region 文件上传  可以带参数 [HttpPost("upload")] public JsonResult uploadProject(IFormFile file, string userId) { if (file != null) { var fileDir = "D:\\aaa"

ASP.NET上传文件的三种基本方法

ASP.NET依托.net framework类库,封装了大量的功能,使得上传文件非常简单,主要有以下三种基本方法. 方法一:用Web控件FileUpload,上传到网站根目录. Test.aspx关键代码: [html] view plain copy <form id="form1" runat="server"> <asp:FileUpload ID="FileUpload1" runat="server&quo

EXTJS+ASP.NET上传文件带实时进度条代码

一,文件夹 二,upLoad.cs是继承IHttpModule的类: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Text; using System.IO; using System.Reflection; using System.Globalization; using System.Web.Hosting; /// <summary>