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 选择文件夹,路径选择,浏览文件夹
选择文件夹,路径选择, 文件夹 资源管理器 推荐 SelectDirectory http://docwiki.embarcadero.com/Libraries/Seattle/en/Vcl.Fi ...
- mac os、linux及unix之间的关系
unix 是由贝尔实验室开发的多用户.多任务操作系统 linux是一类Unix操作系统的统称,严格来说,linux系统只有内核叫“linux”,而linux也只是表示其内核,但因为习惯使然,人们 习惯 ...
- 重构--去除丑陋的switch语句
最近几天,在进行重构的时候,遇到了一个极其丑陋的代码(自己写的 /捂脸 当时时间紧,于是....),今天去重构的时候无论如何也想不出方法,去除这个丑陋的switch语句 ,于是写篇博客,让自己记住这 ...
- [JS] 让人犯晕的JavaScript变量赋值
变量赋值 本文转载自http://hellobug.github.io/blog/javascript-variable-assignment/ 开始之前先来几个例子,确保起始点是晕的状态- :P 例 ...
- nodejs开发工具
我选择的是Hbuilder作为node项目的开发工具. 先在Hbuilder 里面安装nodeEclipse插件,然后重启工具. 点击添加项目,选择其他选项,出现下图选项,然后选择圈住的选项点击下 ...
- Binormal - 副法线
[Binormal - 副法线] Binormal是垂直于Normal.Tangent平面的直线.Normal.Binormal.Tangent三条线构成一个坐标系. 参考:http://202.11 ...
- SQLSERVER 建立全文检索
-- 创建测试表 -- DROP TABLE FullTextIndexing CREATE TABLE FullTextIndexing ( ID INT IDENTITY(1,1) NOT N ...
- windows系统mysql-5.7.19官方绿色版zip包安装教程
环境: 系统环境 Windows 10 64位 mysql版本 5.7.19 一.万变不离的下载 下载页面:https://dev.mysql.com/downloads/mysql/ 点击 Down ...
- $(window).load()和$(document).ready()
一.前言 我们在编写前端代码的js文件时,往往是会先写一个$(function(){}),然后才会在大括号里面继续写我们自己的代码.当时并不能理解为什么要添加这样一个东西,只是把它当做一个标签一样添加 ...
- PythonScripter2.7报错ascii codec can't encode characters in position 0-1:ordinal not in range(128)
1. 这是Python 2 mimetypes的bug2. 需要将Python2.7\lib\mimetypes.py文件中如下片段注释或删除:try: ctype = ctype.encode(de ...