MVC断点续传

jQuery-File-Upload 文件地址

jQuery-File-Upload-master.zip


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

[HttpGet]

[HttpPost]

public HttpResponseMessage Upload()

{

    // Get a reference to the file that our jQuery sent.  Even with multiple files, they will all be their own request and be the 0 index

    HttpPostedFile file = HttpContext.Current.Request.Files[0];

    // do something with the file in this space

    // {....}

    // end of file doing

    this.SaveAs(HttpContext.Current.Server.MapPath("~/Images/") + file.FileName, file);

    // Now we need to wire up a response so that the calling script understands what happened

    HttpContext.Current.Response.ContentType = "text/plain";

    var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();

    var result = new { name = file.FileName };

    

    HttpContext.Current.Response.Write(serializer.Serialize(result));

    HttpContext.Current.Response.StatusCode = 200;

    // For compatibility with IE‘s "done" event we need to return a result as well as setting the context.response

    return new HttpResponseMessage(HttpStatusCode.OK);

}

  • 实现断点续传逻辑

这其中主要是通过解析Http请求头中的Content-Range属性来获知此次处理的文件片断,后续就是基本的文件操作了,没什么可说的。


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

private void SaveAs(string saveFilePath, HttpPostedFile file)

{

    long lStartPos = 0;

    int startPosition = 0;

    int endPosition = 0;

    var contentRange=HttpContext.Current.Request.Headers["Content-Range"];

    //bytes 10000-19999/1157632

    if (!string.IsNullOrEmpty(contentRange))

    {

        contentRange = contentRange.Replace("bytes""").Trim();

        contentRange = contentRange.Substring(0, contentRange.IndexOf("/"));

        string[] ranges = contentRange.Split(‘-‘);

        startPosition = int.Parse(ranges[0]);

        endPosition = int.Parse(ranges[1]);

    }

    System.IO.FileStream fs;

    if (System.IO.File.Exists(saveFilePath))

    {

        fs = System.IO.File.OpenWrite(saveFilePath);

        lStartPos = fs.Length;

        

    }

    else

    {

        fs = new System.IO.FileStream(saveFilePath, System.IO.FileMode.Create);

        lStartPos = 0;

    }

    if (lStartPos > endPosition)

    {

        fs.Close();

        return;

    }

    else if (lStartPos < startPosition)

    {

        lStartPos = startPosition;

    }

    else if (lStartPos > startPosition && lStartPos < endPosition)

    {

        lStartPos = startPosition;

    }

    fs.Seek(lStartPos, System.IO.SeekOrigin.Current);

    byte[] nbytes = new byte[512];

    int nReadSize = 0;

    nReadSize = file.InputStream.Read(nbytes, 0, 512);

    while (nReadSize > 0)

    {

        fs.Write(nbytes, 0, nReadSize);

        nReadSize = file.InputStream.Read(nbytes, 0, 512);

    }

    fs.Close();          

}

时间: 2024-10-16 08:37:44

MVC断点续传的相关文章

asp.net mvc大文件上传、断点续传功能。

文件夹数据库处理逻辑 publicclass DbFolder { JSONObject root; public DbFolder() { this.root = new JSONObject(); this.root.put("f_id", ""); this.root.put("f_nameLoc", "根目录"); this.root.put("f_pid", ""); this

chunkupload 文件上传断点续传组件(java) - 正式发布

chunkupload简介 chunkupload是一款基于java语言的断点续传组件,针对文件上传,非文件下载,集成方便,使用简单. chunkupload实现如下功能: ·  实现断点续传 ·  对于同一个文件,允许多用户同时上传,并且上传的用户越多,上传越快 ·  线程安全 ·  同一物理机下进程安全 ·  文件自动切片,支持合并 ·  内存占用小 ·  高效稳定,高可用 ·  易集成,无第三方依赖 chunkupload只关注文件上传,并没有安全机制,开发者需要自行设计安全控制策略,防范

ASP.NET WebAPi之断点续传下载(中)

前言 前情回顾:上一篇我们遗留了两个问题,一个是未完全实现断点续传,另外则是在响应时是返回StreamContent还是PushStreamContent呢?这一节我们重点来解决这两个问题,同时就在此过程中需要注意的地方一并指出,若有错误之处,请指出. StreamContent compare to PushStreamContent 我们来看看StreamContent代码,如下: public class StreamContent : HttpContent { // Fields pr

.net 实现上传文件分割,断点续传上传文件

一 介绍 断点续传搜索大部分都是下载的断点续传,涉及到HTTP协议1.1的Range和Content-Range头. 来个简单的介绍 所谓断点续传,也就是要从文件已经下载的地方开始继续下载.在以前版本的 HTTP 协议是不支持断点的,HTTP/1.1 开始就支持了.一般断点下载时才用到 Range 和 Content-Range 实体头. Range 用于请求头中,指定第一个字节的位置和最后一个字节的位置,一般格式: Range:(unit=first byte pos)-[last byte

【转】被误解的MVC和被神化的MVVM

被误解的MVC和被神化的MVVM 作者 唐巧 发布于 2015年11月2日 | ArchSummit全球架构师峰会(北京站)2016年12月02-03日举办 被误解的 MVC MVC 的历史 MVC,全称是 Model View Controller,是模型 (model)-视图 (view)-控制器 (controller) 的缩写.它表示的是一种常见的客户端软件开发框架. MVC 的概念最早出现在二十世纪八十年代的 施乐帕克 实验室中(对,就是那个发明图形用户界面和鼠标的实验室),当时施乐帕

被误解的MVC和被神化的MVVM

被误解的 MVC MVC 的历史 MVC,全称是 Model View Controller,是模型 (model)-视图 (view)-控制器 (controller) 的缩写.它表示的是一种常见的客户端软件开发框架. MVC 的概念最早出现在二十世纪八十年代的 施乐帕克 实验室中(对,就是那个发明图形用户界面和鼠标的实验室),当时施乐帕克为 Smalltalk 发明了这种软件设计模式. 现在,MVC 已经成为主流的客户端编程框架,在 iOS 开发中,系统为我们实现好了公共的视图类:UIVie

Spring MVC文件下载

方案一: // 文件下载 @RequestMapping(value = "/downloadFile") public ResponseEntity<byte[]> downloadFile() throws IOException { String basePath = "F:/testDir/"; String fileName = "ChromeStandaloneV45.0.2454.101.exe"; HttpHeader

c# 文件的断点续传

一.开篇描述 本篇博客所描述的断点续传功能是基于c#语言,服务器端采用.net mvc框架,客户端采用winform框架. 本篇博客实现断点续传功能的基本思路:1)服务器端是把接收到的文件流,追加到已有的文件:2)客户端是把文件流截段上传: 其实,任何一种计算机语言基于这个思路,都可以实现断点续传的功能. 二.服务器端 namespace MvcApp.Controllers { public class HomeController : Controller { // // GET: /Hom

C# MVC文件上传

前言 这一节我们来讲讲在MVC中如何进行文件的上传,我们逐步深入,一起来看看. Upload File(一) 我们在默认创建的项目中的Home控制器下添加如下: public ActionResult UploadFile() { return View(); } [HttpPost] public ActionResult UploadFile(HttpPostedFileBase file) { var fileName = file.FileName; var filePath = Ser