网页中文件的下载
1、form表单直接指向action
<form action="/Home/SaveFile1" method="post" enctype="multipart/form-data"> <input type="file" name="file1" /> <button type="submit" class="but1">上传1</button> </form>
public ActionResult SaveFile1() { if (Request.Files.Count > 0) { Request.Files[0].SaveAs(Server.MapPath("~/App_Data/") + Path.GetFileName(Request.Files[0].FileName)); return Content("保存成功"); } return Content("没有读到文件"); }
需要post提交; enctype="multipart/form-data" (传输文件); 需要提交的表单元素需要设置 name 属性;
2、利用jquery.form.min
<form id="form2" action="/Home/SaveFile2" method="post" enctype="multipart/form-data"> <input type="file" name="file1" /> <button type="submit" class="but1">上传2</button> //submit按钮,没有设置name属性 <button type="button" class="but2">上传3</button> //普通按钮 </form>
//方式2 submit按钮,没有设置name属性 $(function () { $('#form2').ajaxForm({ success: function (responseText) { alert(responseText); } }); }); //方式3 普通按钮 $(function () { $(".but2").click(function () { $('#form2').ajaxSubmit({ success: function (responseText) { alert(responseText); } }); }); });
public string SaveFile2() { if (Request.Files.Count > 0) { Request.Files[0].SaveAs(Server.MapPath("~/App_Data/") + Path.GetFileName(Request.Files[0].FileName)); return "保存成功"; } return "没有读到文件"; }
3、分片上传
<div class="content"> <input type="file" id="file6" multiple> <button type="button" class="btnFile6">分片上传6</button> <div class="result"></div> </div>
//方式6(分片上传) $(".btnFile6").click(function () { var upload = function (file, skip) { var formData = new FormData();//初始化一个FormData对象 var blockSize = 1000000;//每块的大小 var nextSize = Math.min((skip + 1) * blockSize, file.size);//读取到结束位置 var fileData = file.slice(skip * blockSize, nextSize);//截取 部分文件 块 formData.append("file", fileData);//将 部分文件 塞入FormData formData.append("fileName", file.name);//保存文件名字 $.ajax({ url: "/Home/SaveFile6", type: "POST", data: formData, processData: false, // 告诉jQuery不要去处理发送的数据 contentType: false, // 告诉jQuery不要去设置Content-Type请求头 success: function (responseText) { $(".result").html("已经上传了" + (skip + 1) + "块文件"); if (file.size <= nextSize) {//如果上传完成,则跳出继续上传 alert("上传完成"); return; } upload(file, ++skip);//递归调用 } }); }; var file = $("#file6")[0].files[0]; upload(file, 0); });
public string SaveFile6() { //保存文件到根目录 App_Data + 获取文件名称和格式 var filePath = Server.MapPath("~/App_Data/") + Request.Form["fileName"]; //创建一个追加(FileMode.Append)方式的文件流 using (FileStream fs = new FileStream(filePath, FileMode.Append, FileAccess.Write)) { using (BinaryWriter bw = new BinaryWriter(fs)) { //读取文件流 BinaryReader br = new BinaryReader(Request.Files[0].InputStream); //将文件留转成字节数组 byte[] bytes = br.ReadBytes((int)Request.Files[0].InputStream.Length); //将字节数组追加到文件 bw.Write(bytes); } } return "保存成功"; }
4、使用Webuploader组件上传
<div class="btns"> <div id="picker">选择文件</div> <button id="ctlBtn" class="btn btn-default">开始上传</button> </div> @section scripts{ <!--引用webuploader的js和css--> <link href="~/Scripts/webuploader-0.1.5/webuploader.css" rel="stylesheet" /> <script src="~/Scripts/webuploader-0.1.5/webuploader.js"></script> <script type="text/javascript"> //简单上传 //var uploader = WebUploader.create({ // // (如果是新浏览器 可以不用 flash) // //swf: '/Scripts/webuploader-0.1.5/Uploader.swf', // // 文件接收服务端。 // server: '/Webuploader/SaveFile', // // 选择文件的按钮。可选。 // // 内部根据当前运行是创建,可能是input元素,也可能是flash. // pick: '#picker' //}); //$("#ctlBtn").click(function () { // uploader.upload(); //}); //uploader.on('uploadSuccess', function (file) { // alert("上传成功"); //}); //分片上传 //var uploader = WebUploader.create({ ////兼容老版本IE //swf: '/Scripts/webuploader-0.1.5/Uploader.swf', //// 文件接收服务端。 //server: '/Webuploader/SveFile2', //// 开起分片上传。 //chunked: true, ////分片大小 //chunkSize: 1000000, ////上传并发数 //threads: 1, //// 选择文件的按钮。 //pick: '#picker' //}); //// 点击触发上传 //$("#ctlBtn").click(function () { //uploader.upload(); //}); //uploader.on('uploadSuccess', function (file) { //alert("上传成功"); //}); //并发上传(多线程上传) var uploader = WebUploader.create({ //兼容老版本IE swf: '/Scripts/webuploader-0.1.5/Uploader.swf', // 文件接收服务端。 server: '/Webuploader/SveFile3', // 开起分片上传。 chunked: true, //分片大小 chunkSize: 1000000, //上传并发数 threads: 10, // 选择文件的按钮。 pick: '#picker' }); // 点击触发上传 $("#ctlBtn").click(function () { uploader.upload(); }); uploader.on('uploadSuccess', function (file) { //上传完成后,给后台发送一个合并文件的命令 $.ajax({ url: "/Webuploader/FileMerge", data: { "fileName": file.name }, type: "post", success: function () { alert("上传成功"); } }); }); </script>
public class WebuploaderController : Controller { // GET: Webuploader public ActionResult Index() { return View(); } public string SaveFile() { if (Request.Files.Count > 0) { Request.Files[0].SaveAs(Server.MapPath("~/App_Data/") + Path.GetFileName(Request.Files[0].FileName)); return "保存成功"; } return "没有读到文件"; } public string SveFile2() { //保存文件到根目录 App_Data + 获取文件名称和格式 var filePath = Server.MapPath("~/App_Data/") + Path.GetFileName(Request.Files[0].FileName); //创建一个追加(FileMode.Append)方式的文件流 using (FileStream fs = new FileStream(filePath, FileMode.Append, FileAccess.Write)) { using (BinaryWriter bw = new BinaryWriter(fs)) { //读取文件流 BinaryReader br = new BinaryReader(Request.Files[0].InputStream); //将文件留转成字节数组 byte[] bytes = br.ReadBytes((int)Request.Files[0].InputStream.Length); //将字节数组追加到文件 bw.Write(bytes); } } return "保存成功"; } public string SveFile3() { var chunk = Request.Form["chunk"];//当前是第多少片 var path = Server.MapPath("~/App_Data/") + Path.GetFileNameWithoutExtension(Request.Files[0].FileName); if (!Directory.Exists(path))//判断是否存在此路径,如果不存在则创建 { Directory.CreateDirectory(path); } //保存文件到根目录 App_Data + 获取文件名称和格式 var filePath = path + "/" + chunk; //创建一个追加(FileMode.Append)方式的文件流 using (FileStream fs = new FileStream(filePath, FileMode.Append, FileAccess.Write)) { using (BinaryWriter bw = new BinaryWriter(fs)) { //读取文件流 BinaryReader br = new BinaryReader(Request.Files[0].InputStream); //将文件留转成字节数组 byte[] bytes = br.ReadBytes((int)Request.Files[0].InputStream.Length); //将字节数组追加到文件 bw.Write(bytes); } } return "保存成功"; } /// <summary> /// 合并文件 /// </summary> /// <param name="path"></param> /// <returns></returns> public bool FileMerge() { var fileName = Request.Form["fileName"]; var path = Server.MapPath("~/App_Data/") + Path.GetFileNameWithoutExtension(fileName); //这里排序一定要正确,转成数字后排序(字符串会按1 10 11排序,默认10比2小) foreach (var filePath in Directory.GetFiles(path).OrderBy(t => int.Parse(Path.GetFileNameWithoutExtension(t)))) { using (FileStream fs = new FileStream(Server.MapPath("~/App_Data/") + fileName, FileMode.Append, FileAccess.Write)) { byte[] bytes = System.IO.File.ReadAllBytes(filePath);//读取文件到字节数组 fs.Write(bytes, 0, bytes.Length);//写入文件 } System.IO.File.Delete(filePath); } Directory.Delete(path); return true; } }

浙公网安备 33010602011771号