首页 > Windows开发 > 详细

断点续传(上传)C#版

时间:2021-02-20 12:04:29      阅读:32      评论:0      收藏:0      [点我收藏+]

1. 客户每次上传前先获取一下当前文件已经被服务器接受了多少

2. 上传时设定偏移量

服务端代码如下:

/// <summary>
/// 断点续传 服务端保存文件代码
/// </summary>
/// <returns></returns>
[HttpPost]
public bool UploadEcgData()
{
    bool result = false;
    FileStream fStream = null;
    BinaryReader bReader = null;
    try
    {
        long offset = 0;  //客户端定义,从X开始往后写,该值由服务端GetFileLength方法提供
        IEnumerable<string> hasOffsetList = new List<string>();
        bool hasOffset = Request.Headers.TryGetValues("Offset", out hasOffsetList);
        if (hasOffset && hasOffsetList.Any())
        {
            long.TryParse(hasOffsetList.First(), out offset);
        }
        HttpPostedFile file = HttpContext.Current.Request.Files[0];
        //设置文件存放路径 
        string dir = HttpContext.Current.Server.MapPath(@"~\UploadFiles");
        int upLoadLength = Convert.ToInt32(file.InputStream.Length);
        fStream = new FileStream(dir + "\\" + file.FileName, FileMode.OpenOrCreate, FileAccess.ReadWrite);
        //偏移指针
        fStream.Seek(offset, SeekOrigin.Begin);

        //从客户端的请求中获取文件流
        bReader = new BinaryReader(file.InputStream);
        byte[] data = new byte[upLoadLength];
        bReader.Read(data, 0, upLoadLength); //将上传文件流读到byte[]中
        fStream.Write(data, 0, upLoadLength);//将byte[]写到文件中,
        result = true;
    }
    catch (Exception ex)
    {
        logger.Error(ex, ex.Message);
        result = false;
    }
    finally
    {
        if (fStream != null)
        {
            //释放流
            fStream.Close();
        }
        if (bReader != null)
        {
            bReader.Close();
        }
    }
    return result;
}

  

上传前,源和目标文件对比

技术分享图片

用 Postman 测试

技术分享图片

 

 

 技术分享图片

 

上传后的源和目标文件对比

 技术分享图片

 

断点续传(上传)C#版

原文:https://www.cnblogs.com/vipsoft/p/14419197.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!