阅读 87

断点续传(上传)C#版

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

2. 上传时设定偏移量

服务端代码如下:

/// 
/// 断点续传 服务端保存文件代码
/// 
/// 
[HttpPost]
public bool UploadEcgData()
{
    bool result = false;
    FileStream fStream = null;
    BinaryReader bReader = null;
    try
    {
        long offset = 0;  //客户端定义,从X开始往后写,该值由服务端GetFileLength方法提供
        IEnumerable hasOffsetList = new List();
        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 测试

 

 

 

 

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

 

 

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

文章分类
代码人生
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐