.net Core分段上传文件,大文件上传(V2.1)

13 篇文章 0 订阅
7 篇文章 0 订阅

UploadController部分代码


        [HttpPost]
        public async Task<IActionResult> UploadPart(IFormFile file,int start,string filetemp)
        {
            long size = file.Length;

            if (!System.IO.Directory.Exists(AppContext.BaseDirectory + "/upload/"))
            {
                System.IO.Directory.CreateDirectory(AppContext.BaseDirectory + "/upload/");
            }
            var filePath = AppContext.BaseDirectory + "/upload/" + filetemp;

            if (start == 0) {
                if(System.IO.File.Exists(filePath)){
                    System.IO.File.Delete(filePath);
                }
            }
            FileStream saveFileStream;
            if (start == 0)
            {
                saveFileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
            }
            else {
                saveFileStream = new FileStream(filePath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
            }
            //Stream stream = file.OpenReadStream();
             把 Stream 转换成 byte[] 
            //byte[] bytes = new byte[file.Length];
            //stream.Read(bytes, 0, bytes.Length);
             设置当前流的位置为流的开始 
            //stream.Seek(0, SeekOrigin.Begin);

            try
            {
                if (start > 0)
                {
                    saveFileStream.Seek(start, SeekOrigin.Begin);
                }
                //saveFileStream.Write(bytes,0,bytes.Length);
                await file.CopyToAsync(saveFileStream);

                // saveFileStream.Seek(start, SeekOrigin.Begin);
                //await saveFileStream.Write(bytes, 0, bytes.Length);
            }
            catch (Exception ex)
            {
            }
            finally
            {
                saveFileStream.Close();
                saveFileStream.Dispose();
            }

            //foreach (var formFile in files)
            //{
            //    var filePath = AppContext.BaseDirectory + "/upload/" + formFile.FileName;
            //    if (formFile.Length > 0)
            //    {
            //        using (var stream = new FileStream(filePath, FileMode.Create))
            //        {
            //            await formFile.CopyToAsync(stream);
            //        }
            //    }
            //}

            return Ok(new { count = 1, size });
        }

前端页面代码

<!DOCTYPE html>
<html>
<head>
    <title>断点续传</title>
    <script src="/js/jquery-1.11.3.min.js"></script>
    <style type="text/css">
        input[type="file" i] {
            width: 100px;
            height: 50px;
            opacity: 0;
            /*visibility: hidden;*/
            margin: 0;
            padding: 0;
            border: 0;
            float: left;
        }

        .upload-button-wrap {
            position: relative;
            display: inline-block;
            vertical-align: middle;
        }

            .upload-button-wrap:hover .upload-button {
                border-color: #000;
            }

        .clearfix:after {
            content: '';
            clear: both;
            display: block;
        }

        .clearfix {
            zoom: 1;
        }

        .upload-button {
            width: 100px;
            height: 50px;
            position: absolute;
            left: 0;
            top: 0;
            z-index: -1;
        }

        .upload-wrap {
            position: relative;
        }

        #uploadButton {
            display: inline-block;
        }
    </style>
</head>

<body>
    <div class="upload-wrap">
        <div class="upload-button-wrap clearfix">
            <input type="file" id="InputFile" name="InputFile">
            <button class="upload-button">选择图片</button>
        </div>
        <button id="uploadButton">上传</button>
    </div>
    <script type="text/javascript">
        (function (w) {
            var fileUpload = function (config) {
                var _files = [],    // 要上传文件的队列
                    _file = null,    // 当前上传的文件
                    _upload = config.uploadId,    // input[type = "file"]的控件ID
                    _submit = config.submitId,    // input[type = "submit"]的控件ID
                    _url = config.url,
                    _unit = 1024 * 500,
                    _start = 0,
                    _xmlRequest = new XMLHttpRequest();

                var _init = function () {
                    document.getElementById(_upload).addEventListener("change", function (e) {
                        _files = this.files;
                        _file = _files[0];
                        e.preventDefault();
                    }, false);
                    document.getElementById(_submit).addEventListener("click", function (e) {


                        _goUpload();
                        //var formData = new FormData();
                        //formData.append('InputFile', _file);
                         向后抬请求文件是否存在
                        //formData.append('fileName', _file.name);
                        //formData.append('fileContent', _file.slice(_start, _start + _unit));

                        //$.ajax({
                        //    url: _url + "?fileName=" + _file.name + "&file_start=" + _start,
                        //    type: 'post',
                        //    contentType: false,
                        //    processData: false,
                        //    data: formData,
                        //    success: function (res) {
                        //        console.log("分段... .. .");
                        //    },
                        //    error: function (res) {
                        //        console.log(res);
                        //    }
                        //});

                        //_xmlRequest.onload = function () {
                        //    if (_xmlRequest.readyState == 4 && _xmlRequest.status == 200) {
                        //        _start = parseInt(_xmlRequest.responseText);
                        //        _uploadFile();
                        //    }
                        //    _xmlRequest.onload = function () {
                        //        if (_xmlRequest.readyState == 4 && _xmlRequest.status == 200) {
                        //            if (_xmlRequest.responseText == "success") {
                        //                _start = _start + _unit;
                        //                _uploadFile();
                        //            }
                        //        }
                        //    }
                        //};
                        //_getSetbacks();
                        e.preventDefault();
                    }, false);
                },
                    // 获取文件进度
                    //_getSetbacks = function () {
                    //    _xmlRequest.open("GET", _url + "?fileName=" + _file.name + "&file_start=" + _start, true);
                    //    _xmlRequest.send(null);
                    //},
                    _goUpload = function () {
                        //if (_start > _file.size) return;
                        if (_start < _file.size) {
                            var weiba = _start + _unit;
                            if (weiba > _file.size) { weiba = _file.size; }
                            var formData = new FormData();
                            formData.append('file', _file.slice(_start, weiba));//这个才是关键file要和后台对应
                            formData.append('fileName', _file.name);
                            formData.append('fileContent', _file.slice(_start, weiba));
                            $.ajax({
                                url: _url + "?filetemp=" + _file.name + "&type=part&start=" + _start,
                                type: 'post',
                                contentType: false,
                                processData: false,
                                async: false,
                                data: formData,
                                success: function (res) {
                                    console.log("分段... .. .");
                                    _start = _start + _unit;
                                    setTimeout(_goUpload, 1000);
                                    //_goUpload();
                                },
                                error: function (res) {
                                    console.log(res);
                                }
                            });
                        } else {
                            console.log("已经完成了");
                        }
                    }
                // 上传文件
                //_uploadFile = function () {
                //    if (_start > _file.size) return;
                //    var weiba = _start + _unit;
                //    if (weiba > _file.size) { weiba = _file.size; }

                //    var formData = new FormData();
                //    formData.append('InputFile', _file);
                //    formData.append('fileName', _file.name);
                //    formData.append('fileContent', _file.slice(_start, weiba));
                //    _xmlRequest.open("POST", _url + "?fileName=" + _file.name + "&file_start=" + _start, true);
                //    _xmlRequest.send(formData);
                //};

                _init()
            }

            w.fileUpload = fileUpload;

        })(window);
        var f = new fileUpload({
            uploadId: 'InputFile',
            submitId: 'uploadButton',
            url: '/Upload/UploadPart'
        })


    </script>
</body>
</html>

这个简洁,我看有一个麻烦得要死,还要修改设置大文件限制啥得。

 

这个是一个例子,简单得例子,实际中要去校验最后文件得md5啥得,还有就是要修改对应得文件存放名和后缀啥得!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值