一體機(廣告投放機)開發


序言

       當今社會廣告隨處可見,廣告展現在大家面前也各盡不同,如電視、報紙、網絡、車站、公車等等應有盡有,廣告是無處不在,如不想見到廣告那就不要出門、不要打開電腦手機、這樣或許能暫時看不到廣告。從這可見廣告在人們生活中起到的作用,很多人都會根據廣告去購買相關商品,所以現在才導致越來越多的企業不惜重金去打廣告。然而廣告又是人們非常討厭的東西,比如在看電視時突然給你來一段廣告,哎...廣告泛濫的年代,你我都是廣告受害者。

       我今天給大家介紹一個廣告一體機的實現思路,供大家一起交流學習,共同進步。也許我說的不是很好的思路,僅供參考。

一體廣告機介紹

       我所介紹的廣告機就是一台大家可能都見過的,如機場、車站等等場所都能看見,它是一台立體的廣告機,里面有一台電腦主機,一塊比較大的觸摸屏,這樣可能就可以組裝成一台一體機了。而我們的一體機還集成了發卡機(會員注冊會將用戶信息寫入到卡片中,再發卡片)、POS機(進行交易)、UPS(備用電源)、攝像頭(拍照)等等集成於一體的機器,顯得功能好像比一般的廣告機要強大很多是吧。

       首先會輪播相應的圖片,當有人觸摸了屏幕,就會根據圖片跳轉到相應的網站,網站為相應的商品信息,這樣可以在這個網站進行注冊,購買商品等等操作,后續好像還可以實現試衣鏡效果,就是選中衣服后根據拍攝的照片把你身體相應的尺寸再將衣服穿在身上,這樣實現試衣鏡的效果,O(∩_∩)O哈哈~,這就是我所介紹的一體廣告機。

實現思路

       一體廣告機是一個基於C/S結構.net開發平台,主要以winform開發應用程序,針對win7操作系統,並默認嵌套某電子商務平台。

       某電子商務平台的整個系統架構是一個基於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

 

功能模塊

1上傳更新包程序

       程序維護通過系統后台上傳前台的更新包,通過后台上傳,並產生版本號,以便客戶端當檢測網站到有最新的更新包,從網站上下載解壓后,更新到客戶端機上。

2.一體機設置

       一體機維護可添加,修改終端機的設置,不同終端機跟用戶關聯,每台終端機相關於一個用戶,終端機所處位置設立,有助於我們區分終端機處在不同地區的,廣告圖片是跟據不同區域進行下載管理。

3.廣告設置

        廣告設置主要以輪播廣告為主,可添加,修改,刪除廣告圖片,上傳廣告圖片,以便前台終端從網站上相應的鏈接下載圖片。

4. 網站接口

       后台制作兩個接口供前台調用(程序更新接口,圖片下載更新接口)。

5.自動更新程序

       前台在開機時,先調用自動運行程序,通過遠程接口(WebServices),判斷是否有更新程序及下載圖片需要更新,從網站平台上更新必須數據,再啟動主程序。

6.輪播廣告

       主程序包括輪播廣告功能,跟據配置文件的列表,從指定的文件目錄中圖片定時顯示在主屏幕上(可利用windows屏保功能),當接觸到觸摸屏后,停止廣告輪播,跳到主程序的網站上。

7. 嵌入網站

       主程序還包括嵌套網站,終端機直接連接網站鏈接,所有網站操作都在終端機上操作。

8. POS支付

        主程序嵌入網站,當網站在進行銷售時,用戶選擇立即支付時,網頁可利用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&amp;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的文件后再將實現代碼貼出來,一起和大家交流學習,請大家關注,不好意思了。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM