好长时间没写博客了,对最近工作中遇到的大文件上传和下载的代码贴出来和大家分享一下。
大文件的上传的和下载是C++的平台通过调用WebService实现文件上传和下载到服务器
/// <summary> /// 大文件文件上传 /// </summary> /// <param name="FilePath">上传文件保存路径</param> /// <param name="fileB">上传的二进制流</param> public void AcceptFile(string FilePath, Byte[] fileB) { FileStream fStream; //存在该文件追加,不存在创建 if (File.Exists(FilePath)) { fStream = new FileStream(FilePath, FileMode.Append, FileAccess.Write); } else { fStream = new FileStream(FilePath, FileMode.Create, FileAccess.Write); } fStream.Write(fileB, 0, fileB.Length);//把二进制流转文化文件 fStream.Close(); } /// <summary> /// 从指定文件夹大文件下载 /// </summary> /// <param name="FileName">文件名</param> /// <param name="StartPosition">截取的开始位置</param> /// <param name="num">调用的次数</param> /// <param name="fileB">返回的二进制流</param> public void DownLoadFile(string FileName, int StartPosition, int num, string FilePath, out Byte[] fileB) { string[] ResourceDir = Directory.GetFiles(FilePath); Byte[] ResourceByte = { 0 }; for (int i = 0; i < ResourceDir.Length; i++) { FileStream fStream=new FileStream(ResourceDir[i].ToString(),FileMode.Open,FileAccess.Write); string ResourceName = ResourceDir[i].ToString().Substring(ResourceDir[i].LastIndexOf("\") + 1); int iLen=1024*1024;//每次下载的大小,设置为1M //找到要下载的文件 if (FileName == ResourceName) { if (fStream.Length - num * iLen < iLen) { fStream.Seek(StartPosition, 0); ResourceByte = new Byte[fStream.Length - num * iLen]; fStream.Read(ResourceByte, 0, (int)fStream.Length - num * iLen); } else { fStream.Seek(StartPosition, 0);//读取二进制流的指定位置 ResourceByte = new Byte[iLen]; fStream.Read(ResourceByte, 0, iLen); } fStream.Close(); } } fileB = ResourceByte; }