先来前端代码

<!DOCTYPE html>

<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>大文件分割上传</title>
<script src="~/js/jquery.min.js"></script>
<script> var page = {
init: function () {
$("#subUpload").click($.proxy(this.upload, this));
},
upload: function () {
var file = $("#fileUpload")[0].files[0], //文件对象
name = file.name, //文件名
size = file.size, //总大小
succeed = 0;
var shardSize = 290 * 1024, //以290kb为一个分片,换算1MB=1 * 1024 * 1024
shardCount = Math.ceil(size / shardSize); //总片数
for (var i = 0; i < shardCount; ++i) {
//计算每一片的起始与结束位置
var start = i * shardSize,
end = Math.min(size, start + shardSize);
//构造一个表单,FormData是HTML5新增的
var form = new FormData();
form.append("data", file.slice(start, end)); //slice方法用于切出文件的一部分
form.append("name", name);
form.append("total", shardCount); //总片数
form.append("index", i + 1); //当前是第几片
//Ajax提交
$.ajax({
url: "../Upload/SaveFile2",
type: "POST",
data: form,
async: true, //异步
processData: false, //很重要,告诉jquery不要对form进行处理
contentType: false, //很重要,指定为false才能形成正确的Content-Type
success: function () {
++succeed;
$("#output").text(succeed + " / " + shardCount);
}
});
}
}
}; $(function () {
page.init();
}); </script>
</head>
<body>
<div>
<input id="fileUpload" name="fileUpload" type="file" /><br />
<button id="subUpload" type="submit">提交</button><br />
<span id="output" style="font-size:12px">等待</span>
</div>
</body>
</html>

再来C#版后台代码

        public ActionResult SaveFile2()
{
string name = Request["name"];
int total = Convert.ToInt32(Request["total"]);
int index = Convert.ToInt32(Request["index"]);
var data = Request.Files["data"];
string dir = Server.MapPath("/UploadFile/Imgs/");
if (!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
}
string file = Path.Combine(dir, name + "_" + index);
data.SaveAs(file); string[] files = Directory.GetFiles(dir);
bool isMerge = true;
for (int i = 1; i <= total; ++i)
{
string part = Path.Combine(dir, name + "_" + i);
if (!files.Contains(part))
{
isMerge = false;
}
} if (isMerge)
{
file = Path.Combine(dir, name);
var fs = new FileStream(file, FileMode.Create);
try {
for (int i = 1; i <= total; ++i)
{
string part = Path.Combine(dir, name + "_" + i);
var bytes = System.IO.File.ReadAllBytes(part);
fs.Write(bytes, 0, bytes.Length);
bytes = null;
System.IO.File.Delete(part);
}
}
finally
{
fs.Close();
}
}
//返回是否成功,此处做了简化处理 return Json(new { Error = 0 });
}

最新文章

  1. Effective Java 读书笔记之十 序列化
  2. html 空格-有趣的试验
  3. checkbox radio select绑定
  4. CSS3_概述、发展史、模块介绍、与浏览器之间的关系
  5. 【转载】10分钟学会理解和解决MySQL乱码问题
  6. Android笔记——Drawerlayout创建侧滑出菜单
  7. js 关于字母和数字之间的转换
  8. 用Python建立连接直接读取与更改Rockwell Control Logix Controller的tag值
  9. Java读文件
  10. 记无法用被动方式登录远程linux主机的原因
  11. 【多线程】java多线程实现生产者消费者模式
  12. Arrays.sort()的底层实现
  13. Ubuntu 16.04 c++ Google框架单元测试
  14. python装饰器三种装饰模式的简单理解
  15. poj2452
  16. oracle date 看时间
  17. andriod绘制图形
  18. Php函数之end
  19. jspspy database help
  20. 用&quot;\v&quot;==&quot;v&quot;判断是IE浏览器和非IE

热门文章

  1. Qt 学习之路 2(44):QFileSystemModel
  2. 【转】idea中applicationContext-trans.xml中的Cannot resolve bean &#39;dataSource&#39;...的问题解决
  3. java单元测试之Mock静态方法
  4. vue $index,$key已经移除了
  5. k8s 集群搭建
  6. (转)Saltstack系列
  7. tabs(标签页的现成页面)原生js写法
  8. 机器学习——GBDT
  9. Windows 10 下彻底关闭 Hyper-V 服务
  10. HZAU 18——Array C——————【贪心】