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啥得,还有就是要修改对应得文件存放名和后缀啥得!