actionscript 圖片通訊

來源:互聯網
上載者:User

目標是一個flash用戶端從本地選擇圖片發送給伺服器,伺服器處理後廣播給所有相關用戶端,這些用戶端顯示這張圖片。

FileReference.browse,聽Event.SELECT取到bytearray,Loader.loadbytes可以取到bitmap

我最早的思路是FileReference.load拿到的資料是bytearray,正好通訊層面上的資料也是bytearray,直接那這個bytearray發送給伺服器,伺服器直接把這個bytearray廣播給用戶端,可是這個bytearray經過了這個旅程後就無法還原為bitmapdata,不知道是確實不能這樣還是因為我對bytearray底層不瞭解的原因。而且通訊時要轉json或者分割字串,圖片型的bytearray轉出來的string是啥"npg/r/n",照理應該是很長的描述顏色數組的資訊,轉出來是這麼短個鳥東西,再還原為bytearray果然是什麼都沒有了。還有粘包。總之這條路就是各種走不通。

正解是發起的用戶端先通過一個服務頁,把圖片上傳到遠端電腦硬碟上,得到一個返回的圖片地址。然後發送給伺服器這個圖片地址,伺服器廣播圖片地址給相關用戶端,這些用戶端下載這張圖片,顯示。具體說,也就是兩次通訊。

第一次通訊:請求一個專門的上傳圖片的服務頁面,用php做服務頁比較流行,比如upload.php。

FileReference.upload(new URLRequest("upload.php")); 聽DataEvent.UPLOAD_COMPLETE_DATA,取到的DataEvent.data就是php頁的返回,所以php頁就要echo出圖片地址,來看這個php頁

$filename = "balabala.png"; //儲存的圖片名稱 可以用時間戳記隨機數遞增數都可以

move_uploaded_file($_FILES['Filedata']['tmp_name'], "./".$filename);

echo($filename);

這樣,在apache目錄下就看到了這張圖片,同時flash得到了圖片名的返回。

關於flash+php的圖片上傳,這篇文章非常完美

http://www.cnblogs.com/ladeng6666/archive/2009/02/17/1392797.html

 

第二次通訊:發起的用戶端上傳完圖片得到了返回的圖片地址,處理後做socket通訊。

socket.writeBytes(bytes); socket.flush();

伺服器收到訊息廣播,相關用戶端收到圖片地址picurl,去載入這張圖片

var loader:Loader = new Loader();
    loader.load(new URLRequest(picurl));
    this.addchild(loader);

這邊loader直接是一個displayobject,也可以轉其他顯示類型。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.