MVC断点续传
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace Web.Controllers
{
using System.IO;
using Newtonsoft.Json;
public class FilesController : Controller
{
// GET: Files
public ActionResult Index()
{
return View();
}
[HttpPost]
public string FileUpload()
{
//获取文件
HttpPostedFileBase file = Request.Files["file"];
//获取一次读多大
int receiveCount = Convert.ToInt32(Request.Headers["getSize"]);
//获取偏移量
int offsetCount= Convert.ToInt32(Request.Headers["offset"]);
if (file != null)
{
string getPath = Server.MapPath("~/img/");
if (!Directory.Exists(getPath))
Directory.CreateDirectory(getPath);
byte[] getBytes = new byte[receiveCount];
int count = 0;
Stream getInputStream = file.InputStream;
//获取文件大小
long size = getInputStream.Length;
using (FileStream fs = new FileStream(getPath + file.FileName, FileMode.OpenOrCreate | FileMode.Append))
{
//从偏移量开始
getInputStream.Seek(offsetCount,SeekOrigin.Current);
while ((count = getInputStream.Read(getBytes, 0, receiveCount)) != 0)
{
fs.Write(getBytes,0,count);
FileData fd = new FileData();
fd.TotalCount = size;
fd.HasReadCount = offsetCount + count;
fd.Path = "/img/" + file.FileName;
return JsonConvert.SerializeObject(fd);
}
}
}
return null;
}
}
public class FileData
{
/// <summary>
/// 文件总大小
/// </summary>
public long TotalCount { get; set; }
/// <summary>
/// 已读大小
/// </summary>
public int HasReadCount { get; set; }
/// <summary>
/// 路径
/// </summary>
public string Path { get; set; }
}
}
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<script src="~/Content/jquery-3.1.1.js"></script>
<script src="~/Content/jquery.form.js"></script>
<style>
#showPrecess{
background: #0026ff;
width: 0px;
height:30px;
}
</style>
</head>
<body>
<div>
<form id="form0">
<p>
<input type="file" name="file" multiple />
<img src="" id="ShowImg" width="100" height="100" />
<div id="Precess" style="width:200px;float:left;border:1px solid #ccc;" >
<div id="showPrecess">
</div>
<span style="width:200px;float:left;" id="showNumber" ></span>
</div>
<input type="button" value="上传" onclick="GetFile()" />
<input type="button" value="暂停" onclick="pause()" />
<input type="button" value="继续" onclick="goon()" />
</p>
</form>
</div>
</body>
</html>
<script>
var totalCount = 0;//总大小
var offsetCount = 0;//偏移量
var receiveState = true;//状态
$(function () {
$("input[name=file]").change(function () {
var getFile = $("input[name=file]")[0].files[0];
var getBlog = window.URL.createObjectURL(getFile);
$("#ShowImg").attr("src", getBlog);
})
})
function GetFile() {
totalCount = 0;
offsetCount = 0;
$("#showPrecess").css("width", "0%");
upload();
}
function upload() {
var getFile = $("input[name=file]")[0].files[0];
var formData = new FormData();
formData.append("file", getFile);
$.ajax({
url: "/Files/FileUpload",
data: formData,
contentType: false,
processData: false,
cache: false,
type: 'POST',
dataType:"json",
headers: {
offset: offsetCount,
getSize:200
},
success: function (d) {
console.log(d);
totalCount = d.TotalCount;
offsetCount = d.HasReadCount;
$("#showPrecess").css("width", (offsetCount / totalCount)*100+"%");
$("#showNumber").html(((offsetCount / totalCount) *100).toFixed(2)+"%");
if (totalCount - offsetCount > 0) {
if (receiveState) {
upload();
}
}
}
})
}
function pause() {
receiveState = false;
}
function goon() {
receiveState = true;
upload();
}
</script>
MVC断点续传的更多相关文章
- Mvc下异步断点续传大文件
最近公司一同事咨询了一个MVC项目下上传大文件时遇到的问题,问题描述如下: MVC项目中,当上传比较大的文件时,速度非常慢,小文件基本没有影响. 原因分析: 如果是用传统的form表单去提交的话,会将 ...
- Asp.net mvc 大文件上传 断点续传
Asp.net mvc 大文件上传 断点续传 进度条 概述 项目中需要一个上传200M-500M的文件大小的功能,需要断点续传.上传性能稳定.突破asp.net上传限制.一开始看到51CTO上的这 ...
- Asp.net mvc 大文件上传 断点续传 进度条
概述 项目中需要一个上传200M-500M的文件大小的功能,需要断点续传.上传性能稳定.突破asp.net上传限制.一开始看到51CTO上的这篇文章,此方法确实很不错,能够稳定的上传大文件,http: ...
- asp.net mvc大文件上传、断点续传功能。
文件夹数据库处理逻辑 publicclass DbFolder { JSONObject root; public DbFolder() { this.root = new JSONObject(); ...
- 被误解的MVC和被神化的MVVM(转)
转载自:http://www.infoq.com/cn/articles/rethinking-mvc-mvvm 原文作者:唐巧 被误解的 MVC MVC 的历史 MVC,全称是 Model View ...
- chunkupload 文件上传断点续传组件(java) - 正式发布
chunkupload简介 chunkupload是一款基于java语言的断点续传组件,针对文件上传,非文件下载,集成方便,使用简单. chunkupload实现如下功能: · 实现断点续传 · ...
- ASP.NET WebAPi之断点续传下载(中)
前言 前情回顾:上一篇我们遗留了两个问题,一个是未完全实现断点续传,另外则是在响应时是返回StreamContent还是PushStreamContent呢?这一节我们重点来解决这两个问题,同时就在此 ...
- .net 实现上传文件分割,断点续传上传文件
一 介绍 断点续传搜索大部分都是下载的断点续传,涉及到HTTP协议1.1的Range和Content-Range头. 来个简单的介绍 所谓断点续传,也就是要从文件已经下载的地方开始继续下载.在以前版本 ...
- IOS:被误解的MVC和被神化的MVVM
MVC的历史 MVC,全称是 Model View Controller,是模型 (model)-视图 (view)-控制器 (controller) 的缩写.它表示的是一种常见的客户端软件开发框架. ...
随机推荐
- delphi 线程 TTask
http://docwiki.embarcadero.com/Libraries/Seattle/en/System.Threading.TTask http://docwiki.embarcader ...
- Thread(线程)三
今天我们继续接着线程讲讲,上一章提到一下task概念, 首先接着task继续往下讲,在前章节提到过Thread怎么实现其他线程完成后再让主线程继续执行的功能,那么如果Task也需要线程等待事件,该怎么 ...
- javaScript字符串操作
JS自带函数concat将两个或多个字符的文本组合起来,返回一个新的字符串.var a = "hello";var b = ",world";var c = a ...
- 自动补齐flexselect+级联下拉框案例
在开发web应用时,经常遇到类似省市区级联下拉框操作,即选中省份自动级联加载该省份所有的市,选中市自动级联加载该市所有的区:假设省市区的数据量很大,此时用户想选中某市,因而要从上往下查找,可能半天都找 ...
- .net中delegate的使用
js中的写法: var GetEntityList = function(pParameter){ var list =[]; return list; }; var aEntityList = Ge ...
- 150. Evaluate Reverse Polish Notation (Stack)
Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...
- ansible的ad-hoc模式
一.什么是ad-hoc模式 ansible中有两种模式,分别是ad-hoc模式和playbook模式 ad-hoc简而言之,就是"临时命令" 二.ad-hoc模式使用的场景 场景一 ...
- 相机IMU融合四部曲(二):误差状态四元数详细解读
相机IMU融合四部曲(二):误差状态四元数详细解读 极品巧克力 前言 上一篇文章,<D-LG-EKF详细解读>中,讲了理论上的SE3上相机和IMU融合的思想.但是,还没有涉及到实际的操作, ...
- 全新的css网站布局--Grid布局
Grid布局全新的css网站布局 CSS Grid 布局由两个核心组成部分是 wrapper(父元素)和 items(子元素). wrapper 是实际的 grid(网格),items 是 grid( ...
- java synchronized详解[转]
Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 一.当两个并发线程访问同一个对象object中的这个synchronized(this ...