• C# 把本地文件上传到服务器上,和从服务器上下载文件


     

     方法一、通过Ajax方式上传文件(input file),使用FormData进行Ajax请求

    <div  >

    <input type="file" name="FileUpload" id="FileUpload">
    <a class="layui-btn layui-btn-mini" id="btn_uploadimg">上传图片</a>
    </div>
     
    <script type="text/jscript">
     
           $(function () {
               $("#btn_uploadimg").click(function () {
                   var fileObj = document.getElementById("FileUpload").files[0]; // js 获取文件对象,(据说IE8 不支持.files写法,未测试
                   if (typeof (fileObj) == "undefined" || fileObj.size <= 0) {
                       alert("请选择图片");
                       return;
                   }
                   var formFile = new FormData();
                   formFile.append("action""UploadVMKImagePath");  
                   formFile.append("file", fileObj); //加入文件对象
     
                   //第一种  XMLHttpRequest 对象
                   //var xhr = new XMLHttpRequest();
                   //xhr.open("post", "/Admin/Ajax/VMKHandler.ashx", true);
                   //xhr.onload = function () {
                   //    alert("上传完成!");
                   //};
                   //xhr.send(formFile);
     
                   //第二种 ajax 提交
     
                   var data = formFile;
                   $.ajax({
                       url: "/Admin/Ajax/VMKHandler.ashx",
                       data: data,
                       type: "Post",
                       dataType: "json",
                       cache: false,//上传文件无需缓存
                       processData: false,//用于对data参数进行序列化处理 这里必须false
                       contentType: false//必须
                       success: function (result) {
                           alert("上传完成!");
                       },
                   })
               })
           })
     
       </script>
     
    方法二、通过form和input file上传
     

    <form id="fmFileUpload_Knowledge" method="post" enctype="multipart/form-data">

    //必须要有name属性,name属性是用于在前台和后台间建立联系的,form中只有具有name属性的控件,其值才会被传递到后台,而没有name属性的控件后台程序是接收不到它的值的

    <input id="UploadFile" type="file" name="name1" /></div> 

    </form>

    <script type="text/jscript">
     
           $(function () {
               $("#btn_uploadimg").click(function () {

                      var options = {
                        type: 'post',
                        data: { Default: "FileUpload",},
                        url: 'Index.aspx',
                        success: function (data) {  

                          //兼容IE和FireFox
                          var file = $("#UploadFile");
                          file.after(file.clone().val(""));
                          file.remove();

                        }
                      };
                      $('#fmFileUpload_Knowledge').ajaxSubmit(options);

               })
           })
     
       </script>
     
    后台

    private string FileUpload()
    {
    string fileName = string.Empty;
    string serverPath = string.Empty;
    try
    {
    HttpFileCollection httpFileCollection = Request.Files;
    if (httpFileCollection.Count > 0) //如果没有name属性,获取不到file
    {
    HttpPostedFile file = httpFileCollection[0];


    fileName = Path.GetFileName(file.FileName);

    if (File.Exists(serverPath))
    {
    rdsl.returnMessage = "该文件已存在,请更改文件名或者删除原文件,然后上传.";
    return GetJSON.JSONSerialize(rdsl);
    }

    Thread thread = new Thread(new ThreadStart(() =>
    {
    file.SaveAs(serverPath);
    }
    ));
    thread.Start();

    }
    else
    {
    rdsl.returnCode = iCode.ToString();
    rdsl.returnMessage = "未获取到文件.";

    }
    return GetJSON.JSONSerialize(rdsl);

    }
    catch (Exception ex)
    {
    log.Error(ex.Message);
    log.Error(ex.StackTrace);

    }


    }

    ------------------------------------------------------------------------------------------------------------

    /// <summary>
    /// 下载文件方法
    /// </summary>
    /// <param name="serverPath">被下载的文件地址(服务器地址包括文件)</param>
    /// <param name="filePath">另存放的路径(本地需要存储文件的文件夹地址)</param>
    public void Download(string serverPath, string filePath)
    {
      WebClient client = new WebClient();
      string fileName = serverPath.Substring(serverPath.LastIndexOf("/") + 1); ;//被下载的文件名
      string path = filePath + fileName;//另存为地址
      try
      {
        WebRequest myre = WebRequest.Create(serverPath);
      }
      catch (Exception ex)
      {
        MessageBox.Show(ex.Message, "Error");
      }
      try
      {
        client.DownloadFile(serverPath, fileName);
        FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
        BinaryReader r = new BinaryReader(fs);
        byte[] mbyte = r.ReadBytes((int)fs.Length);
        FileStream fstr = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write);
        fstr.Write(mbyte, 0, (int)fs.Length);
        fstr.Close();
      }
      catch (Exception ex)
      {
      MessageBox.Show(ex.Message, "Error");
      }
    }

  • 相关阅读:
    redis持久化方案之RDB
    redis实现分布式锁
    redis数据类型(图解)
    js上拉加载
    apicloud直接上传图片
    layer.confirm
    json数组去重
    js解决手机键盘影响定位的问题
    click禁用事件
    ipcloud上传裁切图片,保存为base64再压缩传给后台
  • 原文地址:https://www.cnblogs.com/johnblogs/p/8963526.html
走看看 - 开发者的网上家园