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

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

WebService支持多平臺上傳文件的實現

2019-11-17 01:27:16
字體:
來源:轉載
供稿:網友

WebService支持多平臺上傳文件的實現

要使用網站上傳文件,在asp.net的范疇,我基本上能想到的有兩類,一類是通過HTTP POST請求獲得文件信息,另外一類是通過WebService或者WCF之類的技術對外發布服務。

以前做3G攝像頭項目的時候,做過使用HTTP POST的方式獲得照片,方式很簡單,就是一個aspx文件(其實用asp也行,最開始是用asp實現的,用aspx的時候還出了點幺蛾子),只是客戶端(攝像頭)那邊需要了解POST請求,將圖片做成數據傳輸上來。這個方式也沒什么不好的,就是無奈在集成到系統中的時候總是出點問題,想著反正還要做多種客戶端,于是乎改成第二類方式。

需求是要能夠實現多個平臺(PC,Android,iOS)的文件傳輸。

我說用WCF吧,之前我用來著,容易上手,但是其他人覺得WCF可能不太容易與非.NET平臺互通(沒深入探究,但是網上看到過有人用android調用WCF的,以后有時間再探討),于是乎老老實實的用WebService。

Android調用webservice好像也有兩種方式,我們實現的是用ksoap2調用,首先我需要編寫WEBSERVICE。

文件用什么參數傳遞呢?

  1. 簡單暴力byte[],使用File類或者FileStream類可以很容易將文件流匯入byte數組,直接傳遞。
  2. 不簡單但是暴力string,使用某種方式將文件變成string,再進行傳輸。
  3. 其他方法,類似object?或者別的什么。

這里有序列化的知識,我還沒深入體會,說說自己的看法吧:

首先序列化個人看來就是把對象什么的變得可以存儲和傳輸,有了這個就能夠很方便的實現一些網絡應用。然后就是說KSOAP2對基本的數據類型都能夠序列化,我看到string了,但是也不知道支持還是不支持byte[]型。

回到正題,干脆2個都來吧,反正也不差多少事。

由于自己有點疑慮,所以先實現了第二種,通過某種方式---base64編碼解碼。通過這個編碼可以將BYTE變成能夠直接網絡傳輸的string,server端收到數據之后解碼就能夠得到原始byte[]。以下列出web端函數。

[WebMethod(MessageName = "UploadSmallString")]        public bool UploadSmallString(string fileName, string serializedData)        {            try            {                byte[] receivedBytes = Convert.FromBase64String(serializedData);                using (FileStream fs = new FileStream(HttpContext.Current.Server.MapPath(fileName), FileMode.OpenOrCreate, Fileaccess.ReadWrite, FileShare.ReadWrite))                {                    fs.Write(receivedBytes, 0, receivedBytes.Length);                }                return true;            }            catch            {                return false;            }        }

客戶端用base64編碼就可以了,網上找找很多。細心的客官可能看到函數名SmallString,對的,這個適用于文件不太大的時候傳輸,傳輸很大的文件呢?

分塊!分塊傳輸的好處在于能夠支持斷點續傳,說說客戶端的實現思路:

1.判斷文件大小
2.是否適用于分塊傳輸
3.調用服務進行操作

然后服務器端呢,寫個重載吧,可是試了試不成功,參見http://www.49028c.com/menglin2010/archive/2012/03/29/2421445.html中說不太支持,要改,用[WebServiceBinding(ConformsTo = Wsiprofiles.BasicPRofile1_1)]如果改成None用以支持重載的話,又怕出現兼容性問題,老老實實的吧還。

/// <summary>        /// 使用BASE64編碼接收分塊傳輸的大文件        /// </summary>        /// <param name="fileName">文件名</param>        /// <param name="serializedData">BASE64數據</param>        /// <param name="blockSerial">用以識別文件塊的ID</param>        /// <returns>對應成功文件塊ID,不成功便成-1</returns>        [WebMethod(MessageName = "UploadBlobString", Description = "支持大文件傳輸的方法,blockserial為0將創建新文件,這也是默認行為")]        public int UploadBlobString(string fileName, string serializedData, int blockSerial = 0)        {            try            {                byte[] receivedBytes = Convert.FromBase64String(serializedData);                if (blockSerial == 0)                {                    using (FileStream fs = new FileStream(HttpContext.Current.Server.MapPath(fileName), FileMode.Create))                    {                        fs.Write(receivedBytes, 0, receivedBytes.Length);                    }                }                else                {                    using (FileStream fs = new FileStream(HttpContext.Current.Server.MapPath(fileName), FileMode.Append))                    {                        fs.Write(receivedBytes, 0, receivedBytes.Length);                    }                }                return blockSerial;            }            catch            {                return -1;            }        }

琢磨了一下,好像這個完全可以替代前一個方法,是用.NET默認參數的特性,指定blockSerial默認為0。如果客戶端中斷了,續傳的時候從斷點blockSerial開始就OK了。

接下來說說第一種,使用bye[]的方式。

[WebMethod(MessageName = "UploadSmallByte", Description = "直接發送BYTE數組存儲")]        public bool UploadSmallByte(string fileName, byte[] fileBytes)        {            try            {                using (FileStream fs = new FileStream(HttpContext.Current.Server.MapPath(fileName), FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite))                {                    fs.Write(fileBytes, 0, fileBytes.Length);                }                return true;            }            catch            {                return false;            }        }

這種方式我沒怎么測試過,但是有一個有意思的事情,就是如果ANDROID編碼BASE64后的string直接傳遞給byte[]參數,這個函數依然可以正常工作,上傳的圖片還是可以正常顯示,很是詭異呀,想在.net下試一試,直接由于類型不同,不能編譯,以后有機會再琢磨琢磨。

P.S. BASE64方式的代碼經過測試能夠在ANDROID平臺和PC平臺下通過,iOS等待BASE64實現(貌似沒有內部的BASE64編碼方法),從原理上應該沒問題,歡迎大家討論。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品免费看久久久香蕉| 成人写真福利网| 国产精品91一区| 欧美理论在线观看| 亚洲自拍偷拍区| 国产精品直播网红| 欧美性色xo影院| 91在线免费看网站| 777国产偷窥盗摄精品视频| www.日韩欧美| 国产亚洲精品高潮| 亚洲一区二区三区四区视频| 国产精品成人v| 国产精品视频久久久久| 亚洲精品美女视频| 久久成人免费视频| 日韩国产精品亚洲а∨天堂免| 欧美天堂在线观看| 欧美巨乳美女视频| 欧美成人精品激情在线观看| 国产欧美日韩精品专区| 大胆欧美人体视频| 亚洲第一区中文字幕| 国模gogo一区二区大胆私拍| 亚洲精品成人久久久| 亚洲美女福利视频网站| 日韩中文字幕视频| 色婷婷成人综合| 国产亚洲欧洲黄色| 欧美一级免费视频| 国产精品久久久久久久久久久不卡| 成人福利视频在线观看| 97视频在线观看网址| 欧美日韩午夜剧场| 亚洲www视频| 成人97在线观看视频| 国产精品网站视频| 久久久久久有精品国产| 欧美激情中文字幕乱码免费| 国产欧美一区二区三区在线| 5566成人精品视频免费| 韩国欧美亚洲国产| 亚洲亚裔videos黑人hd| 黄色成人av网| 精品福利免费观看| 亚洲成人在线网| 性色av香蕉一区二区| 亚洲自拍偷拍区| 日韩免费在线视频| 国产精品亚洲自拍| 91tv亚洲精品香蕉国产一区7ujn| 欧美性猛交xxxx| 亚洲人午夜精品| 91av视频在线免费观看| 国产欧美精品日韩精品| 久久精品视频免费播放| 精品亚洲夜色av98在线观看| 日韩av片电影专区| 国a精品视频大全| 久久精品视频网站| 国产盗摄xxxx视频xxx69| 成人欧美在线视频| 全色精品综合影院| 欧美成人精品一区二区三区| 国产有码在线一区二区视频| 亚洲成人在线视频播放| www.久久色.com| 亚洲欧洲在线播放| 日韩欧美高清在线视频| 色婷婷av一区二区三区在线观看| 亚洲欧洲av一区二区| 精品国产31久久久久久| 欧美精品激情视频| 俺去啦;欧美日韩| 久久亚洲国产精品成人av秋霞| 91精品国产91久久久| 中文字幕亚洲一区二区三区| 欧美激情国产日韩精品一区18| 91精品国产高清| 亚洲精品久久久久久久久久久久| 美日韩精品免费观看视频| 5566成人精品视频免费| 亚洲人精选亚洲人成在线| 国产精品美女av| 久久久久久久国产精品视频| 欧美大成色www永久网站婷| 亚洲人高潮女人毛茸茸| 亚洲欧美日韩精品久久奇米色影视| 久久精品久久久久久| 中文字幕国产亚洲2019| 日韩a**站在线观看| 91精品久久久久久久久久久久久久| 午夜免费日韩视频| 欧美日韩国产页| 亚洲视频视频在线| 欧美激情一区二区三区久久久| 亚洲欧美激情在线视频| 中文字幕久精品免费视频| 色多多国产成人永久免费网站| 97久久精品人搡人人玩| 成人欧美一区二区三区黑人孕妇| 亚洲成年人在线| www.欧美三级电影.com| 日本午夜在线亚洲.国产| 亚洲欧美资源在线| 美日韩精品免费观看视频| 国产精品网址在线| 日韩免费看的电影电视剧大全| 欧美精品久久久久久久| 欧美精品在线免费播放| 亚洲欧美激情一区| 91禁国产网站| x99av成人免费| 欧美一级淫片丝袜脚交| 久久亚洲精品网站| 91免费电影网站| 国产精品麻豆va在线播放| 欧美国产高跟鞋裸体秀xxxhd| 精品毛片三在线观看| 国外成人免费在线播放| 亚洲黄在线观看| 欧美成人四级hd版| 视频在线一区二区| 久久久久久国产| 久久久久亚洲精品成人网小说| 午夜精品蜜臀一区二区三区免费| 亚洲成色999久久网站| 黑人巨大精品欧美一区二区| 在线看欧美日韩| 欧美一区二区三区艳史| xxx成人少妇69| 热久久免费国产视频| 亚洲第一在线视频| 国产精品美女免费视频| 亚洲欧美制服另类日韩| 亚洲级视频在线观看免费1级| 日韩视频免费看| 国产精品户外野外| 国产91精品久久久久| 亚洲天天在线日亚洲洲精| 中文字幕久久久| 欧美成人合集magnet| 91在线高清视频| 亚洲免费视频网站| 亚洲片在线观看| 欧美激情精品久久久久久变态| 精品视频久久久久久| 中文字幕av一区二区三区谷原希美| 国产成人a亚洲精品| 一区二区三区美女xx视频| 国产在线观看精品| 668精品在线视频| 亚洲精品v欧美精品v日韩精品| 操日韩av在线电影| 亚洲四色影视在线观看| 亚洲成人中文字幕| 国产精品一区电影| 欧美亚洲另类制服自拍| 日韩黄色在线免费观看| 国产精品久久精品| 91爱爱小视频k| 国产欧美最新羞羞视频在线观看| 日韩欧美999| 成人黄色在线播放|