Html中的代码:

 <!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<meta charset="utf-8" />
<script src="Contents/JScript/jquery.min.js"></script>
</head>
<body>
<form id="uploadForm">
<!-- ajax请求的话不需要method="post" action="MvcUload.html" enctype="multipart/form-data"这些参数,否则405错误-->
<!--<form method="post" action="MvcUload.html" enctype="multipart/form-data" id="uploadForm">-->
<input type="file" name="file" id="file" /><button onclick="fnUpload()">上传文件</button>
</form>
<form method="post" action="../../UploadFiles/DownLoadFile" enctype="multipart/form-data" id="uploadForm1">
<button onclick="fnSubmit()">下载文件</button>
</form>
<script>
function fnUpload() {
var formData = new FormData($("#uploadForm")[0]);//var formData = new FormData();//formData.append("file", $("#file")[0].files[0]); //获取文件法二   两种方法都可以
             $.ajax({
async: false,//要求同步 不是不需看你的需求
url: "../UploadFiles/SaveFile",
type: 'POST',
data: formData,
processData: false, //必须false才会避开jQuery对 formdata 的默认处理
contentType: false, //必须false才会自动加上正确的Content-Type
success: function (res) {
alert(res);
}, error: function (res) {
alert("请求失败");
}
}); }
function fnSubmit() {
$("#uploadForm1").submit();
}
</script>
</body>
</html>

C#后台控制器里面的方法:

  public class UploadFilesController : Controller
{
//保存文件
public string SaveFile()
{
var result = "";
HttpFileCollection files = System.Web.HttpContext.Current.Request.Files;
if (files.Count>)
{
HttpPostedFile file = files[];//一次上传一个文件
if (file.ContentLength > )
{
try
{
var path = Server.MapPath("../uploadfiles");
if (!Directory.Exists(path)) Directory.CreateDirectory(path);
var combineName = System.IO.Path.Combine(path, System.IO.Path.GetFileName(file.FileName));//组合成路径
file.SaveAs(combineName);
result = "文件上传成功!";
}
catch (Exception e)
{
result = e.ToString();
}
}
else
result = "文件不能为空!";
}
else
result = "文件不能为空!";
return result;
} //下载文件
public void DownLoadFile()
{
HttpRequest request = System.Web.HttpContext.Current.Request;
var re = request.Url;//查看请求地址,发现 /UploadFiles/DownLoadFile request.Url.LocalPath http://localhost:2565/UploadFiles/DownLoadFile request.Url.OriginalString
//请求地址都不是Controllers文件夹下面的地址,需要注意表单action的地址
HttpResponse response = System.Web.HttpContext.Current.Response;
var files = Directory.GetFiles(Server.MapPath("../uploadfiles"));
if (files.Length > ) {
var fileUrl = files[];//取第一个下载
var fileArr = fileUrl.Split('\\');
var fileName = fileArr[fileArr.Length - ];
response.Clear();
response.ContentType = "application/octet-stream";
response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName));
response.TransmitFile(fileName);
}
}
}

Html Ajax上传文件,form表单下载文件的更多相关文章

  1. 使用隐藏form表单下载文件,解决url方式下载,由于环境问题而限制url长度,满足不了所有的需求!

    一 对于某些环境导出是直接用wiondow.href=url直接导出下载,有些业务需求,如员工档案等字段比较多的时候,全选导出就会引发异常,由于Nginx转发长度限制的问题, 如果运维不愿意改变环境, ...

  2. Struts2文件上传(基于表单的文件上传)

    •Commons-FileUpload组件 –Commons是Apache开放源代码组织的一个Java子项目,其中的FileUpload是用来处理HTTP文件上传的子项目   •Commons-Fil ...

  3. 【文件上传】文件上传的form表单提交方式和ajax异步上传方式对比

    一.html 表单代码 …… <input type="file" class="file_one" name="offenderExcelFi ...

  4. Java中request请求之 - 带文件上传的form表单

    常用系统开发中总免不了显示图片,保存一些文件资料等操作. 这些操作的背后,就是程序员最熟悉的 enctype="multipart/form-data"类型的表单. 说起file类 ...

  5. 理解流方式上传和form表单上传

    流方式上传: $post_input = 'php://input'; $save_path = dirname( __FILE__ ); $postdata = file_get_contents( ...

  6. Ajax提交Form表单及文件上传

    刚刚申请下来的博客,写得第一篇.有点小激动,本人以前是一名工业3D设计师突然有些变故做上了JavaWeb开发: 前几天,发现了一些小问题.我在写后台管理页面时,需要上传一张图片.于是我就用很普通的Fo ...

  7. layui框架实现多图片手动上传和随表单提交方法

    首先在官方文档并没有手动上传的说明文档,这里手动实现上传原理是:在表单中有三个按钮,分别是上传图片按钮.隐藏上传按钮.表单提交按钮,点击上传图片按钮之后,图片添加在前端但是并没有真正的上传,而是在点击 ...

  8. 导出excel用ajax不行,提交form表单可以

    导出excel用ajax不行,提交form表单可以. 一直用ajax找原因,网页不出现下载提示框 写了 response.setContentType("application/binary ...

  9. Atitit vue.js 把ajax数据 绑定到form表单

    Atitit vue.js 把ajax数据 绑定到form表单 1.1. 使用场景:主要应用在编辑与提交场合..1 1.2. 绑定数据到form控件,可以使用jquery,不过vue.js更加简单1 ...

随机推荐

  1. 读书笔记「Python编程:从入门到实践」_7.用户输入和while循环

    7.1 函数input()的工作原理 函数input() 让程序暂停运行,等待用户输入一些文本.获取用户输入后,Python将其存储在一个变量中,以方便你使用. message = input(&qu ...

  2. 【剑指Offer】16、合并两个排序的链表

      题目描述:   输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则.   解题思路:   首先需要判断几个特殊情况,即判断输入的两个指针是否为空.如果第一个 ...

  3. 【剑指Offer】9、变态跳台阶

      题目描述:   一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法.   解题思路:   当只有一级台阶时,f(1)=1:当有两级台阶时, ...

  4. windows开机自启动bat脚本设置

    群里有朋友问到windows下如何设计开机自启动的脚本,一般而言小鱼大多还是在linux环境下运维,windows的bat了解的很少,windows运行机制也不是特别了解,不过既然朋友问到这个问题,虽 ...

  5. shell脚本编程及bash特性

    bash特性及bash脚本编程初步 终端,附着在终端的接口程序; GUI: KDE,GNome,Xfce CLI: /etc/shells bash的特性: 命令行展开: ~,{} 命令别名: ali ...

  6. Silverlight之我见——制作星星闪烁动画

    圣诞节来了,无聊,做点东西纪念一下. 原理很简单,生成1000个圆,从随机数来布置它们的位置,通过动画来处理它们的透明度,动画时长也是随机生成. 1.创建图形数组并设置背景透明,渐变笔触,大小等,而后 ...

  7. 学习EXTJS6(1)安装环境

    1.官方下载地址: extjs6 GPL版:https://www.sencha.com/legal/gpl/ sencha cmd:https://www.sencha.com/products/e ...

  8. lunix下的redis数据库操作——set集合

    创建:(集合的特点是:有序,无重复) sadd set 1 2 3 4 5 6 查看: smembers set 删除元素: srem set 3 # 还剩 1 2 4 5 6 移动: sadd se ...

  9. orcale 日期显示格式化

    SQL> select * 2 from emp 3 where hiredate='1987-11-17'; where hiredate='1987-11-17' * 第 3 行出现错误: ...

  10. Cloudera 5.8.3 SolrCloud+HDFS的索引数据备份和恢复。(需重启solr进程。)

    一.备份基于HDFS的solrCloud集合数据 1.确认要备份的solr文件夹. /solr/history_customer_collection_test 2.开启HDFS快照功能. hdfs ...