亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

C# 大文件分段上傳,下載

2019-11-06 06:04:08
字體:
來源:轉載
供稿:網友

1》客戶端 分段上傳方法

public static readonly int G_BLOCK_LEN_PER = 2 * 1024 * 1024; PRivate void UploadZipMap(string upLoadZipFilePath, string upLoadZipFileName) { FileStream fileStream = null; try { using (fileStream = new FileStream(upLoadZipFilePath, FileMode.Open, Fileaccess.Read)) { long FileLength = fileStream.Length; List<long> PkgList = new List<long>(); long PkgNum = FileLength / Convert.ToInt64(G_BLOCK_LEN_PER); for (long iIdx = 0; iIdx < FileLength / Convert.ToInt64(G_BLOCK_LEN_PER); iIdx++) { PkgList.Add(Convert.ToInt64(G_BLOCK_LEN_PER)); } long s = FileLength % G_BLOCK_LEN_PER; if(s != 0) { PkgList.Add(s); } for (long iPkgIdx = 0; iPkgIdx < PkgList.Count; iPkgIdx++) { long bufferSize = PkgList[(int)iPkgIdx]; byte[] buffer = new byte[bufferSize]; int bytesRead = fileStream.Read(buffer, 0, (int)bufferSize); if (iPkgIdx == 0) { Webservice_Map_Sync_Mgr.Instance.ws_UPLoadOffLineMap_Sync_Ex(buffer, upLoadZipFileName, true); } else { Webservice_Map_Sync_Mgr.Instance.ws_UPLoadOffLineMap_Sync_Ex(buffer, upLoadZipFileName, false); } } } } catch (Exception ex) { LogMgr.Instance.WriteInfo("FileMgr : FileToByte_Ex ->異常: " + ex, true); } finally { if (fileStream != null) { //關閉資源 fileStream.Close(); } } }

2》WebService 上傳方法

//@ 文件虛擬路線 private string MapPath = @"./MapFiles/"; /// <summary> /// 上傳 /// </summary> /// <param name="BurferBytes">文件流</param> /// <param name="FileName">文件名</param> /// <param name="IfCreate">是否創建?(操作)</param> /// <returns></returns> [WebMethod(Description = "UPLoadOffLineMap")] public string UPLoadOffLineMap(byte[] BurferBytes, string FileName, bool IfCreate) { string strJsonContent = string.Empty; BaseResponse response = new BaseResponse(); try { if (BurferBytes.Length == 0) throw new Exception("上傳字節數組長度為0"); //@! 存儲文件路徑 string filePath = Server.MapPath(MapPath); if (false == Directory.Exists(filePath)) Directory.CreateDirectory(filePath); long length = FileWriteOp(BurferBytes, FileName, IfCreate, filePath); response.STATUS = true; response.MESSAGE = string.Format("寫入文件長度 {0}", length.ToString()); } catch (Exception ex) { response.STATUS = false; response.MESSAGE = ex.Message; logger.ErrorException("文件上傳-》異常:", ex); } finally { strJsonContent = response.ToJson(); } return strJsonContent; }

3》BaseResponse 類 (服務端跟客戶端都已用)

using Newtonsoft.Json;using System;namespace Test.Model{ public class BaseResponse { protected bool m_Status = false; /// <summary> /// 狀態 /// </summary> public bool STATUS { get { return m_Status; } set { m_Status = value; } } protected string m_Message = string.Empty; public string MESSAGE { get { return m_Message; } set { m_Message = value; } } protected ClassInfoObj m_ClassInfo_Obj = null; public ClassInfoObj CLASSINFO_OBJ { get { return m_ClassInfo_Obj; } set { m_ClassInfo_Obj = value; } } public string ToJson() { string Json = string.Empty; try { Json = JsonConvert.SerializeObject(this); } catch(Exception ex) { Json = string.Empty; } return Json; } } public class ClassInfoObj { protected string m_ClassName = string.Empty; public string CLASSNAME { get { return m_ClassName; } set { m_ClassName = value; } } protected string m_ClassJson = string.Empty; public string CLASSJSON { get { return m_ClassJson; } set { m_ClassJson = value; } } } public class FileInfoClass { public FileInfoClass(string FileName, long FileLength) { this.m_FileName = FileName; this.m_FileLength = FileLength; } /// <summary> /// 文件名 /// </summary> protected string m_FileName = string.Empty; public string FileName { get { return m_FileName; } set { m_FileName = value; } } /// <summary> /// 文件長度 /// </summary> protected long m_FileLength = 0; public long FileLength { get { return m_FileLength; } set { m_FileLength = value; } } public string ToJson() { string Json = string.Empty; try { Json = JsonConvert.SerializeObject(this); } catch (Exception ex) { Json = string.Empty; } return Json; } }}

4》WebService 下載方法

/// <summary> /// 文件下載 /// </summary> /// <param name="pFilePath">文件路徑</param> /// <param name="pFileName">文件名稱</param> /// <param name="PosOffset">文件偏移位置</param> /// <param name="BlockLength">下載長度</param> /// <returns></returns> [WebMethod(Description = "下載文件字節(DNLoadOffLineMap)")] public string DNLoadOffLineMap(string FileName,long PosOffset,int BlockLength) { GisBaseResponse Response = new GisBaseResponse(); string strJsonContent = string.Empty; FileStream FileStream = null; try { string pFilePaths = Server.MapPath(MapPath); if (BlockLength > 16 * 1024) throw new Exception("下載文件分塊大小大于16KB"); string strFilePath = Path.Combine(pFilePaths, FileName); if (false == File.Exists(strFilePath)) throw new Exception(string.Format("失敗 :未能找到 {0} 文件!",strFilePath)); string strBase64 = string.Empty; using (FileStream = File.Open(strFilePath, FileMode.Open, FileAccess.Read)) { FileStream.Seek(PosOffset, SeekOrigin.Begin); byte[] bufferBytes = new byte[BlockLength]; int readLength = FileStream.Read(bufferBytes, 0, bufferBytes.Length); strBase64 = Convert.ToBase64String(bufferBytes); } Response.STATUS = true; Response.MESSAGE = strBase64; } catch(Exception ex) { string strErrMsg = ex.Message; Response.STATUS = false; Response.MESSAGE = strErrMsg; } finally { strJsonContent = JsonConvert.SerializeObject(Response); if(null != FileStream) { FileStream.Close(); FileStream = null; } } return strJsonContent; }--------------------------------------------------------------------------------------- /// <summary> /// 先獲取文件信息再進行下載 /// </summary> /// <param name="pFilePath">文件路徑</param> /// <param name="FileName">文件名稱</param> /// <returns></returns> [WebMethod(Description = "獲取文件信息")] public string GetFileInfo(string FileName) { string strJsonContent = string.Empty; GisBaseResponse oResponse = new GisBaseResponse(); try { string pFilePaths = Server.MapPath(MapPath); //@! 保存文件 string strFileName = Path.Combine(pFilePaths, FileName); if (false == File.Exists(strFileName)) { oResponse.STATUS = false; oResponse.MESSAGE = "失敗 :未能找到文件!"; } FileInfo oFileInfo = new FileInfo(strFileName); FileInfoClass oFileInfoClass = new FileInfoClass(oFileInfo.Name, oFileInfo.Length); oResponse.STATUS = true; oResponse.MESSAGE = string.Empty; ClassInfoObj oContent = new ClassInfoObj(); oContent.CLASSNAME = oFileInfoClass.GetType().Name; oContent.CLASSJSON = oFileInfoClass.ToJson(); oResponse.CLASSINFO_OBJ = oContent; } catch (Exception ex) { while (ex.InnerException != null) ex = ex.InnerException; logger.ErrorException("獲取文件信息出現錯誤.", ex); oResponse.STATUS = false; oResponse.MESSAGE = "異常:" + ex.Message; } finally { strJsonContent = oResponse.ToJson(); } return strJsonContent; }

5》客戶端 分段下載 方法

private void Download(string fileName , string outFolder) { //string fileName = "test.zip"; //string outFolder= @"C:/"; //@!獲取Webservice文件信息 string strJson = Webservice_Map_Sync_Mgr.Instance.ws_DownloadOffLineMapFileName_Sync(fileName); GisBaseResponse oGisBaseResponse = GetJson.ToGisBaseResponse(strJson); FileInfoClass oFileInfoClass = GetJson.ToFileInfoClass(oGisBaseResponse); const int G_BLOCK_LEN_PER = 16 * 1024; //下載16KB if (true == oGisBaseResponse.STATUS) { long FileLength = oFileInfoClass.FileLength; List<long> PkgList = new List<long>(); long PkgNum = FileLength / Convert.ToInt64(G_BLOCK_LEN_PER); for (long iIdx = 0; iIdx < FileLength / Convert.ToInt64(G_BLOCK_LEN_PER); iIdx++) { PkgList.Add(Convert.ToInt64(G_BLOCK_LEN_PER)); } long s = FileLength % G_BLOCK_LEN_PER; if (s != 0) { PkgList.Add(s); } for (long iPkgIdx = 0; iPkgIdx < PkgList.Count; iPkgIdx++) { long bufferSize = PkgList[(int)iPkgIdx]; if (iPkgIdx == 0) { FileOperation_Ex(iPkgIdx * G_BLOCK_LEN_PER, fileName, G_BLOCK_LEN_PER, true, outFolder); } else { FileOperation_Ex(iPkgIdx * G_BLOCK_LEN_PER, fileName, G_BLOCK_LEN_PER, false, outFolder); } } }

6》FileOperation_Ex 方法

/// <summary> /// 文件操作 /// </summary> /// <param name="fileBt">文件流</param> /// <param name="fileName">文件名</param> /// <param name="ifCreate">是否創建?(操作)</param> /// <param name="FilePath">文件路徑</param> /// <returns>返回文件長度</returns> private long FileOperation_Ex(long FileOffset, string FileName, int DownLength, bool ifCreate, string FilePath) { string JsonRet =Webservice_Map_Sync_Mgr.Instance.ws_DownloadOffLineMap_Snc(FileName, FileOffset, DownLength); GisBaseResponse oGisBaseResponse = GetJson.ToGisBaseResponse(JsonRet); byte[] myByteFile = Convert.FromBase64String(oGisBaseResponse.MESSAGE); long lWriteLength = -1; FileStream fstream = null; try { FileMode fileMode = (ifCreate) ? FileMode.Create : FileMode.Append; //@! 是否創建新文件 fstream = new FileStream(FilePath + FileName, fileMode); //@! 二進制轉換成文件 fstream.Write(myByteFile, 0, myByteFile.Length); lWriteLength = fstream.Length; } catch (Exception ex) { lWriteLength = -1; } finally { fstream.Close(); } return lWriteLength; }

7》Webservice 同步異步_學習

[學習1] (http://blog.csdn.net/wayne20018891/article/details/7587347)

[學習2] (http://www.cnblogs.com/menglin2010/archive/2012/03/30/2423679.html)


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品老女人精品视频| 色婷婷av一区二区三区在线观看| 欧美高清视频在线| 久久视频在线直播| 亚洲免费影视第一页| 久久人人爽人人爽人人片av高清| 91精品国产高清自在线看超| 911国产网站尤物在线观看| 成人中文字幕+乱码+中文字幕| 欧美在线xxx| 久久精品久久久久| 日韩在线免费av| 亚洲福利在线播放| 国产精品午夜国产小视频| 国产91精品高潮白浆喷水| 久久免费高清视频| 成人在线视频福利| 亚洲白虎美女被爆操| 色偷偷av亚洲男人的天堂| 亚洲影院色在线观看免费| 国产精品久久久久aaaa九色| 亚洲国产高清高潮精品美女| 日本成人在线视频网址| 免费不卡欧美自拍视频| 狠狠色狠狠色综合日日小说| 中文字幕国产精品久久| 国产亚洲精品成人av久久ww| 成人网欧美在线视频| 欧美限制级电影在线观看| 黄网站色欧美视频| 欧美亚洲成人网| 欧美精品在线观看| 在线视频免费一区二区| 亚洲女同精品视频| 欧美激情欧美激情在线五月| 色综合色综合网色综合| 色偷偷av亚洲男人的天堂| 亚洲综合中文字幕在线| 亚洲国产中文字幕久久网| 久久久国产影院| 91亚洲精品在线观看| 中文字幕欧美在线| 国产+成+人+亚洲欧洲| 亚洲成人久久电影| 国产精品视频在线播放| 国产精品亚洲片夜色在线| 色妞在线综合亚洲欧美| 欧美乱大交xxxxx另类电影| 91人人爽人人爽人人精88v| 亚洲午夜精品久久久久久性色| 国产视频久久久久久久| 亚洲国产小视频在线观看| 亚洲美女久久久| 欧美日韩精品在线观看| 精品国产91久久久久久老师| 欧美电影免费观看大全| 国产日韩欧美中文| 日韩精品极品在线观看| 亚洲精品videossex少妇| 久久精品国产视频| 精品国产精品自拍| 欧美性理论片在线观看片免费| 国产精品成人av性教育| 欧美成人黑人xx视频免费观看| 久热99视频在线观看| 国产精品久久久久高潮| 最近2019免费中文字幕视频三| 性欧美暴力猛交69hd| 国产丝袜一区二区| 色狠狠久久aa北条麻妃| 久国内精品在线| 欧美成人黑人xx视频免费观看| 亚洲免费福利视频| 久久视频在线视频| 欧美日韩成人黄色| 另类色图亚洲色图| 伊人成人开心激情综合网| 久久影院免费观看| 日韩电视剧免费观看网站| 亚洲国产高清自拍| 国产精品高潮视频| 欧美日韩成人在线视频| 久久这里只有精品视频首页| 国产精品黄视频| 三级精品视频久久久久| 久久91亚洲精品中文字幕| 午夜精品久久久久久久99黑人| 2019中文字幕免费视频| 国产九九精品视频| 中文欧美在线视频| 91亚洲精品久久久久久久久久久久| 亚洲国产天堂网精品网站| 中文字幕亚洲一区二区三区五十路| 国产欧美一区二区三区久久人妖| 最新国产精品拍自在线播放| 欧美巨猛xxxx猛交黑人97人| 国产精品尤物福利片在线观看| 中文字幕无线精品亚洲乱码一区| 欧美在线性爱视频| 日韩高清有码在线| 色综合久久悠悠| 国产精品一香蕉国产线看观看| 亚洲偷熟乱区亚洲香蕉av| 亚洲第一色在线| 亚洲国产精品电影在线观看| 亚洲欧美综合另类中字| 国产美女高潮久久白浆| 亚洲精品福利免费在线观看| 欧美精品一区二区免费| 高清一区二区三区四区五区| 国产成人精品在线观看| 91chinesevideo永久地址| 国产精品亚洲综合天堂夜夜| 欧美性猛交xxxx免费看漫画| 海角国产乱辈乱精品视频| 欧美xxxx18性欧美| 正在播放欧美视频| 久久久精品国产网站| 国产精品久久国产精品99gif| 亚洲国产精品成人va在线观看| 欧美午夜激情小视频| 夜夜嗨av一区二区三区四区| 亚洲国产天堂久久国产91| 亚洲色图国产精品| 成人黄色短视频在线观看| 久久激情五月丁香伊人| 亚洲国产成人爱av在线播放| 91在线观看免费高清| 性亚洲最疯狂xxxx高清| 成人亚洲欧美一区二区三区| 久久久国产精品视频| 青青青国产精品一区二区| 超碰97人人做人人爱少妇| 亚洲国产精品va在线看黑人| 色综合伊人色综合网| 最近2019中文字幕大全第二页| 日韩国产高清污视频在线观看| 亚洲影视中文字幕| 日韩欧美精品网址| 久久成人精品视频| 孩xxxx性bbbb欧美| 国产精品久久久久久搜索| 久久国产精品99国产精| 亚洲欧美日韩区| 啪一啪鲁一鲁2019在线视频| 欧美第一页在线| 亚洲人成啪啪网站| 色噜噜狠狠狠综合曰曰曰| 欧美日本啪啪无遮挡网站| 91视频国产一区| 亚洲人成人99网站| 亚洲欧美综合图区| 欧美中文字幕在线观看| 亚洲成人性视频| 日韩hd视频在线观看| 欧美精品免费在线观看| 激情成人在线视频| 精品福利免费观看| 亚洲精品久久7777777| 久久免费国产视频| 欧美日韩国产限制| 国产成人a亚洲精品| 亚洲综合色激情五月| 久久久久久国产免费|