當今社會廣告隨處可見,廣告展示在你們面前也各盡不一樣,如電視、報紙、網絡、車站、公車等等應有盡有,廣告是無處不在,如不想見到廣告那就不要出門、不要打開電腦手機、這樣或許能暫時看不到廣告。從這可見廣告在人們生活中起到的做用,不少人都會根據廣告去購買相關商品,因此如今才致使愈來愈多的企業不惜重金去打廣告。然而廣告又是人們很是討厭的東西,好比在看電視時忽然給你來一段廣告,哎...廣告氾濫的年代,你我都是廣告受害者。java
我今天給你們介紹一個廣告一體機的實現思路,供你們一塊兒交流學習,共同進步。也許我說的不是很好的思路,僅供參考。node
我所介紹的廣告機就是一臺你們可能都見過的,如機場、車站等等場所都能看見,它是一臺立體的廣告機,裏面有一臺電腦主機,一塊比較大的觸摸屏,這樣可能就能夠組裝成一臺一體機了。而咱們的一體機還集成了髮卡機(會員註冊會將用戶信息寫入到卡片中,再發卡片)、POS機(進行交易)、UPS(備用電源)、攝像頭(拍照)等等集成於一體的機器,顯得功能好像比通常的廣告機要強大不少是吧。web
首先會輪播相應的圖片,當有人觸摸了屏幕,就會根據圖片跳轉到相應的網站,網站爲相應的商品信息,這樣能夠在這個網站進行註冊,購買商品等等操做,後續好像還能夠實現試衣鏡效果,就是選中衣服後根據拍攝的照片把你身體相應的尺寸再將衣服穿在身上,這樣實現試衣鏡的效果,O(∩_∩)O哈哈~,這就是我所介紹的一體廣告機。編程
一體廣告機是一個基於C/S結構.net開發平臺,主要以winform開發應用程序,針對win7操做系統,並默認嵌套某電子商務平臺。windows
某電子商務平臺的整個系統架構是一個基於BS結構的J2EE多層架構。面向用戶訪問層面的是由WEB門戶組成。訪問層下面是應用和業務集成層;爲應用業務支撐的是應用服務器層。服務器
服務器端:J2ee網站開發WebServic提供「廣告圖片下載」接口和遠程「安裝文件更新」接口。網絡
客戶端:訪問遠程「安裝文件更新接口」實現自動更新功能,訪問遠程「廣告圖片下載接口」實現遠程更新下載功能,並利用廣告圖片實現輪播功能。數據結構
當一體機開機時,系統天天自動遠行應用程序。應用程序運行時自動經過互聯網訪問網站的webservices遠程接口,跟據該終機的地理位置參數,下載網站的廣告圖片,並加載到一體機的本地文件中,以準備程序運行廣告的信息。架構
廣告輪播功能,當系統定時遠行輪播廣告,當點擊了該程序廣告圖片連接後,系統退出輪播廣告應用,直接跳到相關連接的主界面。函數
一體機還具有自動更新功能,當網站服務器上傳了要更新的應用程序包之後,系統在一開始開機運行時檢查網站程序包的更新版本號,如服務器的版本號比一體機版本號大,系統自動更新程序。
一體機對網站的連接可進行二維碼的加密,產生二維護圖片顯示在系統的右上角,利用二維碼解碼可還原當前的連接。難點:攝像頭捕捉二維碼,攝像成圖及清晰度,系統對圖片識別功能的問題,第二攝像會有背景圖干擾,手機抓取系統較難區分二維圖與背景。
一體機參數
<xml>
終端機ID =」1111」
地區ID=」222」
所在機場=」白雲機場」
所在機場位置=」A1」
當前版本號=」1」
UserID=
</xml>
廣告列表參數
<xml> <AD name=」廣告名稱」 url=」廣告所在連接」 area=」區域」></AD> <AD name=」廣告名稱」 url=」廣告所在連接」 area=」區域」></AD> <AD name=」廣告名稱」 url=」廣告所在連接」 area=」區域」></AD> 區域=地區ID + 所在機場 </xml>
一體機維護 |
|||
字段 |
名稱 |
類型 |
說明 |
終端機 |
id |
int |
與用戶表關聯 |
地區編碼 |
regionId |
int |
與地區表關聯 |
所在機場 |
airport |
varchar |
|
機場位置 |
Place |
varchar |
|
版本號 |
version |
int |
|
廣告維護 |
|||
字段 |
名稱 |
類型 |
說明 |
廣告名稱 |
ADName |
varchar |
|
廣告連接 |
ADUrl |
varchar |
|
地區編碼 |
regionId |
int |
與地區表關聯 |
所在機場 |
airport |
varchar |
|
程序維護經過系統後臺上傳前臺的更新包,經過後臺上傳,併產生版本號,以便客戶端當檢測網站到有最新的更新包,從網站上下載解壓後,更新到客戶端機上。
一體機維護可添加,修改終端機的設置,不一樣終端機跟用戶關聯,每臺終端機相關於一個用戶,終端機所處位置設立,有助於咱們區分終端機處在不一樣地區的,廣告圖片是跟據不一樣區域進行下載管理。
廣告設置主要以輪播廣告爲主,可添加,修改,刪除廣告圖片,上傳廣告圖片,以便前臺終端從網站上相應的連接下載圖片。
後臺製做兩個接口供前臺調用(程序更新接口,圖片下載更新接口)。
前臺在開機時,先調用自動運行程序,經過遠程接口(WebServices),判斷是否有更新程序及下載圖片須要更新,從網站平臺上更新必須數據,再啓動主程序。
主程序包括輪播廣告功能,跟據配置文件的列表,從指定的文件目錄中圖片定時顯示在主屏幕上(可利用windows屏保功能),當接觸到觸摸屏後,中止廣告輪播,跳到主程序的網站上。
主程序還包括嵌套網站,終端機直接鏈接網站連接,全部網站操做都在終端機上操做。
主程序嵌入網站,當網站在進行銷售時,用戶選擇當即支付時,網頁可利用At啓動應用程序的POS支付功能。
銀聯POS機接口,內置無線POS機分爲刷卡器,打印機集成在一體機上,直接經過POS機對銀行進行交易,交易數據從本地頁面ActiveX控制進行數據傳輸,ActiveX經過獲取用戶輸入的卡號、密碼、金額經過銀聯加密機制進行加密,經過無線POS終端進行傳送,傳送成功後返回有效信息,ActiveX從上傳到網站服務器上,表示支付成功。
我所使用的廣告滾動使用的是flash來實現,調用了VS的Interop.ShockwaveFlashObjects.dll文件,這個VS自帶的。首先是屏蔽flash右鍵的實現代碼(主要做用是單擊右鍵不會出現其餘菜單,不然就會出現點擊右鍵有其餘菜單顯示,這確定不符合廣告的要求的,因此必需要屏蔽flash右鍵,實現邏輯也是調用鉤子去屏蔽右鍵):
#region * 屏蔽FLASH右鍵
//此段代碼實現調用系統函數,來實現窗體
//加載flash時,能夠屏蔽其右鍵
private const int GWL_WNDPROC = -4;
public delegate IntPtr FlaWndProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); private IntPtr OldWndProc = IntPtr.Zero; private FlaWndProc Wpr = null; [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern IntPtr SetWindowLong(IntPtr hWnd, int nIndex, FlaWndProc wndProc); [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern IntPtr CallWindowProc(IntPtr wndProc, IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); //給此控件一個特定消息值 private IntPtr FlashWndProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam) { if (msg == 516) return (IntPtr)0; return CallWindowProc(OldWndProc, hWnd, msg, wParam, lParam); } #endregion
FormLoad加載flash,並設定程序的分辨率(更加廣告機的分辨率去設定,這樣避免程序顯示不正確,由於要控制廣告機除了播放滾動的圖片以外,就是跳轉相應的網站,而不容許進行桌面,不然別人就會作不少其餘操做了,因此這點必需要控制的,並且圖片的分辨率也是這樣的,因此這樣就這樣就固定死程序的分辨率了),而且加載swf文件,並開始play,實現flash滾動,實現代碼以下:
this.Width = 1080;
this.Height = 1920; this.Location = new Point(0, 0); //-- this.timer1.Enabled = true; this.timer1.Interval = 100; this.timer1.Start(); //-- //屏蔽右鍵 this.Wpr = new FlaWndProc(this.FlashWndProc); this.OldWndProc = SetWindowLong(axShockwaveFlash1.Handle, GWL_WNDPROC, Wpr); //--加載FLASH this.axShockwaveFlash1.Movie = Application.StartupPath + @"//Flash//apaperstudio.swf"; axShockwaveFlash1.Play(); //-- ReadUserInfo();//--讀取用戶信息 //-- LoadWeb();//--預加載網站
讀取用戶信息是XML文檔,這樣能夠進行在現場進行配置,使用起來就比較方便。
/// <summary>
/// 讀取用戶信息
/// </summary>
protected virtual void ReadUserInfo()
{ //--從autorun.xml文件中讀取配置文件 string autPath = ""; autPath = Application.StartupPath + @"//autorun.xml";//配置文件目錄 if (!File.Exists(autPath))//判斷程序目錄是否存在配置文件 { MessageBox.Show("配置文件不存在,請聯繫管理員!"); return; } XmlDocument xmldoc = new XmlDocument(); xmldoc.Load(autPath);//加載XML文件 XmlNodeList audList = xmldoc.SelectSingleNode("Root").ChildNodes;//獲取Root節點的全部子節點 foreach (XmlNode xn in audList)//遍歷全部子節點 { XmlElement xe = (XmlElement)xn;//將子節點類型轉換爲XmlElement類型 userIDStr = xe.GetAttribute("UserID");//用戶ID } }
XML文件以下:
<?xml version="1.0" encoding="UTF-8"?> <Root> <Para TerminalID="1111" AreaID="85" Airport="福田" AirportPlace="A1" UserID="adminUserId" Version="14" /> </Root>
預加載網站實現代碼以下,這些數據都是經過升級程序下載到,並保存在本地,再供一體機程序調用:
/// <summary>
/// 預加載網站
/// </summary>
protected virtual void LoadWeb()
{ //--從ADXml.xml文件中讀取廣告列表 string autPath = ""; autPath = Application.StartupPath + @"//ADXml.xml";//廣告列表目錄 if (!File.Exists(autPath))//判斷程序目錄是否存在廣告列表 { MessageBox.Show("廣告列表不存在,請聯繫管理員!"); return; } XmlDocument xmldoc = new XmlDocument(); xmldoc.Load(autPath);//加載XML文件 XmlNodeList audList = xmldoc.SelectSingleNode("ADRoot").ChildNodes;//獲取ADRoot節點的全部子節點 foreach (XmlNode xn in audList)//遍歷全部子節點 { XmlElement xe = (XmlElement)xn;//將子節點類型轉換爲XmlElement類型 string url = xe.GetAttribute("url");//預加載的網址 webBrowser1.Navigate(url); System.Threading.Thread.Sleep(5000);//--休眠5S } }
廣告XML文件:
<?xml version="1.0" encoding="UTF-8"?> <ADRoot> <AD name="終端7" imgLink="attachments/imgs/ad/201111/016965953952723834xorg.jpg" url="www.darenbang.com/taoletao/front/activity/activityIndex.do" area="85" place="福田" /> <AD name="終10" imgLink="attachments/imgs/ad/201111/066067356307548920xorg.jpg" url="www.darenbang.com/taoletao/front/bbase/productSearch.do?type=2&Q_newProduct_SN_EQ=1" area="85" place="福田" /> <AD name="終端9" imgLink="attachments/imgs/ad/201111/012278613580213338xorg.jpg" url="www.darenbang.com/taoletao/front/index/channelsPage.do?categoryId=7" area="85" place="福田" /> <AD name="終端4" imgLink="attachments/imgs/ad/201111/052606357223467712xorg.jpg" url="www.darenbang.com" area="85" place="福田" /> <AD name="終端5" imgLink="attachments/imgs/ad/201111/023391954847731068xorg.jpg" url="www.darenbang.com/taoletao/front/activity/activityBuyer.do" area="85" place="福田" /> <AD name="終端6" imgLink="attachments/imgs/ad/201111/007393856959106082xorg.jpg" url="www.darenbang.com/taoletao/front/activity/activityFront.do" area="85" place="福田" /> </ADRoot>
點擊FLASH圖片跳轉網站,再經過鏈接打開相應的網站,這個在flash代碼進行了定義,因此使用cmd命令就能夠打開相應的網站,再根據連接跳轉到相應的網站,打開的網站也以前在咱們的程序中進行打開,使用的是webBrowser控件,這樣就控制只能打開咱們所指定的網站。
#region * 點擊FLASH圖片跳轉網站
private void axShockwaveFlash1_FSCommand(object sender, AxShockwaveFlashObjects._IShockwaveFlashEvents_FSCommandEvent e)
{ if (e.command == "cmd") { WebForm xForm = new WebForm(e.args.ToString() + "?id=" + userIDStr);//設定跳轉的網站+用戶ID xForm.Show(); } } #endregion
程序啓動時會調用Timer事件,啓動程序升級,在相應的時間節點(能夠設定多個時間檢測是否須要升級)進行升級。
#region * 啓動升級程序
ArrayList AutoTask = new ArrayList();
private void timer1_Tick(object sender, EventArgs e) { System.DateTime dtAuto = DateTime.Now; AutoTask.Add("00:00:00"); for (int n = 0; n < AutoTask.Count; n++) { if (dtAuto.ToLongTimeString().Equals(AutoTask[n])) { System.Diagnostics.Process.Start(Application.StartupPath + @"\\AutoUpdater.exe"); //啓動程序 this.Close();//--關閉升級程序 this.Dispose(); } } } #endregion
升級程序會作幾件事情:
1. 經過Webservice下載一體機的程序,根據版本號比較決定是否須要升級。
2. 經過Webservice下載一體機的廣告圖片,這樣在相應的網站後臺對圖片進行維護,將廣告數據保存在本地的XML文件中,供程序讀取XML文件。
經過WebService下載數據,程序或廣告圖片,實現邏輯以下:
#region * 經過WebService下載數據
public virtual void DownloadWebServiceData()
{
//--綁定Webservice
ws = new AutoUpdater.WebService.AdvertisWebServicesService(); ws.Url = "http://www.fmafia.com/taoletao/AdvertisWebServices.jws?wsdl"; //-- //--從autorun.xml文件中讀取配置文件 string autPath = ""; autPath = Application.StartupPath + @"//autorun.xml";//配置文件目錄 if (!File.Exists(autPath))//判斷程序目錄是否存在配置文件 { MessageBox.Show("配置文件不存在,請聯繫管理員!"); return; } xmldoc.Load(autPath);//加載XML文件 XmlNodeList audList = xmldoc.SelectSingleNode("Root").ChildNodes;//獲取Root節點的全部子節點 foreach (XmlNode xn in audList)//遍歷全部子節點 { XmlElement xe = (XmlElement)xn;//將子節點類型轉換爲XmlElement類型 idStr = Convert.ToInt32(xe.GetAttribute("TerminalID"));//終端機ID areaStr = Convert.ToInt32(xe.GetAttribute("AreaID"));//地區 placeStr = xe.GetAttribute("Airport");//機場 airportPlaceStr = xe.GetAttribute("AirportPlace");//機場位置 userIDStr = xe.GetAttribute("UserID");//用戶ID versionStr = Convert.ToInt32(xe.GetAttribute("Version"));//版本號 } //--******************************************************************************************** //--圖片下載 if (DownImage() == false) { return; }; //--******************************************************************************************** //--文件下載 if (DownFile() == false) { return; }; } #endregion
圖片的下載,webservice接口由Java實現的,C#程序直接調用接口程序便可:
#region * 圖片下載
/// <summary>
/// 圖片下載
/// </summary>
protected virtual Boolean DownImage()
{
//--**************************************************************************************************************************************
//--第二步從webservice下載廣告數據
string xStr = ""; try { xStr = ws.getAdvertisList(areaStr, placeStr); } catch (Exception) { MessageBox.Show("讀取遠程數據失敗!"); return false; } //--*************************************************************************************************************************************** //--String類型XML轉成XML文檔 XmlDocument doc = new XmlDocument(); try { doc.LoadXml(xStr);//加載XML文檔 } catch (Exception xEr) { MessageBox.Show(xEr.Message); return false; } string xmlPath = ""; xmlPath = Application.StartupPath + @"\ADXml.xml";//保存XML的路徑 //檢測XML文件是否已存在 if (File.Exists(xmlPath)) { File.Delete(xmlPath);//刪除該文件 doc.Save(xmlPath);//保存XML文件 } else { doc.Save(xmlPath);//保存XML文件 } //--************************************************************************************************************************************** //--根據下載的廣告XML數據從新生成一個新的XML文檔,新XML文檔即用於FLASH的加載圖片所用 if (File.Exists(xmlPath)) { //--把廣告XML文檔數據寫入臨時Datatable1中 xDataTable1.Clear(); //-- xmldoc.Load(xmlPath);//加載本地XML文件 XmlNodeList nodeList = xmldoc.SelectSingleNode("ADRoot").ChildNodes;//獲取ADRoot節點的全部子節點 foreach (XmlNode xn in nodeList)//遍歷全部子節點 { XmlElement xe = (XmlElement)xn;//將子節點類型轉換爲XmlElement類型 DataRow xDataRow1 = xDataTable1.NewRow(); xDataRow1[0] = xe.GetAttribute("name"); xDataRow1[1] = CompanyUrl + xe.GetAttribute("imgLink");//--加入連接地址,即爲圖片下載地址 xDataRow1[2] = xe.GetAttribute("url"); xDataRow1[3] = xe.GetAttribute("area"); xDataRow1[4] = xe.GetAttribute("place"); xDataTable1.Rows.Add(xDataRow1); } } else { MessageBox.Show("廣告數據並未存在,請聯繫管理員!"); return false; } //--************************************************************************************************************************************** //--下載圖片 if (xDataTable1 != null) { for (int i = 0; i < xDataTable1.Rows.Count; i++)//循環下載圖片 { //-- string ImagePath = ""; ImagePath = Application.StartupPath + @"\Flash\swf\" + xDataTable1.Rows[i]["Name"].ToString().Trim() + ".JPG";//檢測圖片是否已經存在 //檢測圖片文件是否已存在,若是已經存在再也不進行下載,不存在則進行下載 if (!File.Exists(ImagePath))//檢測文件是否存在 { DownloadImage(xDataTable1.Rows[i]["Name"].ToString().Trim() + ".JPG", xDataTable1.Rows[i]["imgLink"].ToString().Trim());//調用數據下載方法 } else { //若是圖片文件已經存在,則不進行處理,自動跳過 } } } //--*************************************************************************************************************************************** //--生成FLASH加載圖片的XML文件 xmldoc = new XmlDocument(); //--加入XML生命段落 XmlDeclaration xmldecl; xmldecl = xmldoc.CreateXmlDeclaration("1.0", "GB2312", null);//建立XML的頭元素 xmldoc.AppendChild(xmldecl);//添加元素 //--加入一個根元素 xmlelem = xmldoc.CreateElement("", "imgList", ""); xmldoc.AppendChild(xmlelem); //-- if (xDataTable1 != null) { //--循環DataTable寫入XML文檔中,用於FLASH的加載 for (int i = 0; i < xDataTable1.Rows.Count; i++) { //--在根節點中添加元素 XmlNode root = xmldoc.SelectSingleNode("imgList"); XmlElement xe1 = xmldoc.CreateElement("list"); xe1.SetAttribute("path", Application.StartupPath + @"\Flash\swf\" + xDataTable1.Rows[i]["Name"].ToString().Trim() + ".JPG");//FLASH加載圖片地址 xe1.SetAttribute("info", "");//FLASH圖片顯示的描述,現不須要,暫時爲空 xe1.InnerText = xDataTable1.Rows[i]["url"].ToString().Trim();//點擊FLASH跳轉的網站 root.AppendChild(xe1); } } xmldoc.Save(Application.StartupPath.ToString() + @"\\Flash\\imgList.xml");//FLASH加載的XML //--圖片下載完成 return true; } #endregion #region * 圖片下載操做方法 /// <summary> /// 圖片下載操做方法 /// </summary> /// <param name="FileName">圖片名字</param> /// <param name="Url">圖片下載地址</param> public virtual void DownloadImage(string FileName, string Url) { WebRequest request = WebRequest.Create(Url); WebResponse response = request.GetResponse(); Stream reader = response.GetResponseStream(); string FilePath = Application.StartupPath + @"//Flash//swf";//存放圖片的文件夾 //--檢測文件夾是否存在 if (!Directory.Exists(FilePath)) { //若是不存在就建立該文件夾 Directory.CreateDirectory(FilePath); } FileStream writer = new FileStream(FilePath + @"//" + FileName, FileMode.OpenOrCreate, FileAccess.Write); byte[] buff = new byte[5120];//--5M的圖片 int c = 0; //實際讀取的字節數 while ((c = reader.Read(buff, 0, buff.Length)) > 0) { writer.Write(buff, 0, c); } writer.Close(); writer.Dispose(); reader.Close(); reader.Dispose(); response.Close(); } #endregion
以上可能顯示比較多的是對XML的讀寫操做而已,相對而言比較簡單。
文件下載的實現邏輯:
#region * 文件下載
/// <summary>
/// 文件下載
/// </summary>
protected virtual Boolean DownFile()
{
//--**************************************************************************************************************************************
//--第一步從webservice下載更新程序
string xFileStr = "";//定義下載文件的路徑
try { xFileStr = ws.getUpdatePack(versionStr);//從webservice讀取下載信息 } catch(Exception) { MessageBox.Show("讀取遠程數據失敗!"); return false; } string xFileSavePath = "";//定義保存文件的路徑 xFileSavePath = Application.StartupPath + @"\\YTJ.exe"; if (xFileStr != null)//--需更新文件 { string xFileDowmLoadPath = CompanyUrl + xFileStr;//下載文件的路徑 if (File.Exists(xFileSavePath))//檢測文件是否存在,若是存在則刪除 { //先殺死進程中的文件 System.Diagnostics.Process[] ps = System.Diagnostics.Process.GetProcesses(); foreach (System.Diagnostics.Process p in ps) { if (p.ProcessName.ToLower() == "ytj") { p.Kill();//殺死進程 break; } } //-- Thread.Sleep(2000);//--休眠2秒 File.Delete(xFileSavePath);//--刪除文件 //-- DownloadFile(xFileSavePath, xFileDowmLoadPath);//文件下載 UpdateVersion();//版本號的更新 //--
} else//不存在直接建立 { DownloadFile(xFileSavePath, xFileDowmLoadPath);//文件下載 UpdateVersion();//版本號的更新 } } else { //--若是文件的版本號相同,則不須要進行下載操做 //--不須要更新文件,可直接打開應用程序 } //啓動程序 //啓動應用程序以前先殺死進程中的文件,防止程序屢次打開 System.Diagnostics.Process[] pss = System.Diagnostics.Process.GetProcesses(); foreach (System.Diagnostics.Process p in pss) { if (p.ProcessName.ToLower() == "ytj") { p.Kill(); break; } } System.Diagnostics.Process.Start("YTJ.exe"); //啓動程序 this.Close();//--關閉升級程序 this.Dispose(); //-- //--**************************************************************************************************************************************** //--文件更新完成 return true; } /// <summary> /// 版本號的更新 /// </summary> protected virtual void UpdateVersion() { //--文件更新後,配置文件XML文檔中的版本號增長"1"。 //--修改版本號 //--從autorun.xml文件中讀取配置文件 string autPath = ""; autPath = Application.StartupPath + @"//autorun.xml";//配置文件目錄 if (!File.Exists(autPath))//判斷程序目錄是否存在配置文件 { MessageBox.Show("配置文件不存在,請聯繫管理員!"); return; } xmldoc.Load(autPath);//加載XML文件 XmlNodeList audList = xmldoc.SelectSingleNode("Root").ChildNodes;//獲取Root節點的全部子節點 foreach (XmlNode xn in audList)//遍歷全部子節點 { XmlElement xe = (XmlElement)xn;//將子節點類型轉換爲XmlElement類型 xe.SetAttribute("Version", Convert.ToString((versionStr + 1)));//修改版本號,並增長1 } xmldoc.Save(autPath);//保存XML文件 } #endregion
文件下載操做方法
#region * 文件下載操做方法
/// <summary>
/// 文件下載操做方法
/// </summary>
/// <param name="FileName">文件名</param>
/// <param name="Url">文件下載地址</param>
public virtual void DownloadFile(string xFile, string Url)
{
WebRequest request = WebRequest.Create(Url); WebResponse response = request.GetResponse(); Stream reader = response.GetResponseStream(); FileStream writer = new FileStream(xFile, FileMode.OpenOrCreate, FileAccess.Write); byte[] buff = new byte[10240];//--10M的文件 int c = 0; //實際讀取的字節數 while ((c = reader.Read(buff, 0, buff.Length)) > 0) { writer.Write(buff, 0, c); } writer.Close(); writer.Dispose(); reader.Close(); reader.Dispose(); response.Close(); } #endregion
經過以上的介紹,也許不少人會以爲這實現起來很是簡單,一些相對簡單的代碼便可實現了,不過你有沒有好好想一想,怎麼實現動態的圖片顯示在flash裏面,而且一點擊flash圖片調轉到相應的網站,這又是怎麼實現的,這也許就是實現一體廣告機的關鍵之處,當年我在作這個地方但是花費了不少時間,查閱了不少資料才知道,flash還能夠編程,這其中就是經過這個實現的,不知你可否想獲得,若是你能想獲得那證實你就是高手了,O(∩_∩)O哈哈~不知道的話但願今天看了個人博文能在你之後的工做中的使用到,也許這只是其中一種實現方法,也許你有更好的方法,若有但願你可以提供給我,你們一塊兒學習進步。
首先是經過程序的下載,會將相應的信息寫入到XML中,XML文件以下:
<?xml version="1.0" encoding="GB2312"?> <imgList> <list path="D:\java\C#\YTJ\$DLL\Flash\swf\終端7.JPG" info="">http://www.cnblogs.com/luoyuhao/</list> <list path="D:\java\C#\YTJ\$DLL\Flash\swf\終10.JPG" info="">http://www.cnblogs.com/luoyuhao/</list> <list path="D:\java\C#\YTJ\$DLL\Flash\swf\終端9.JPG" info="">http://www.cnblogs.com/luoyuhao/</list> <list path="D:\java\C#\YTJ\$DLL\Flash\swf\終端4.JPG" info="">http://www.cnblogs.com/luoyuhao/</list> <list path="D:\java\C#\YTJ\$DLL\Flash\swf\終端5.JPG" info="">http://www.cnblogs.com/luoyuhao/</list> <list path="D:\java\C#\YTJ\$DLL\Flash\swf\終端6.JPG" info="">http://www.cnblogs.com/luoyuhao/</list> <list path="D:\java\C#\YTJ\$DLL\Flash\swf\g02.JPG" info="">http://www.cnblogs.com/luoyuhao/</list> <list path="D:\java\C#\YTJ\$DLL\Flash\swf\g03.JPG" info="">http://www.cnblogs.com/luoyuhao/</list> <list path="D:\java\C#\YTJ\$DLL\Flash\swf\test.JPG" info="">http://www.cnblogs.com/luoyuhao/</list> </imgList>
爲了顯得不是打廣告,全部的連接都進行了替換,還有就是圖片的路徑是絕對路徑,好像這裏不能用相對路徑,這好像是flash的緣由,使用了絕對路徑就顯示不出圖片了。
因爲如今電腦未安裝flash編輯工具,因此就不能貼上flash相應的實現代碼了,後續等我能打開flash的文件後再將實現代碼貼出來,一塊兒和你們交流學習,請你們關注,很差意思了。