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


    网址:https://www.cnblogs.com/tongyi/p/4274354.html

    实际情况一般有单独的站点存放静态文件,比如图片、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返回
                    }
                }
            }
    方法请看:我的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);
    }




































     
  • 相关阅读:
    解构赋值好处
    react中给state赋予初始值(使用dva)
    popover/ToolTip设置在root标签外面,如何设置样式-antd
    判断对象为空的情况
    HTML、XHTML、XML和HTML5之间的联系与区别
    innerHTML、innerText、outerHTML和value的区别
    JS面向对象经典题目(一)
    js中apply、call和bind的区别
    react的TodoList增删改
    JS原生addClass、removeClass实现
  • 原文地址:https://www.cnblogs.com/zxtceq/p/10716484.html
Copyright © 2020-2023  润新知