网页中文件的下载

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;
    }
}

 

 

posted @ 2022-03-10 11:20  殇琉璃  阅读(674)  评论(0)    收藏  举报