首頁 > FLEX, 程式設計 > FLEX 一次開啟多個檔案 & 限制檔案類型

FLEX 一次開啟多個檔案 & 限制檔案類型

2009年3月4日  瀏覽次數 : 5,690

上次開啟圖片放入 FLASH 中,我們實做的是一次讀取一個檔案,今天, ♣梅干桑♣ 也真宵貪阿,居然想要一次讀入七八張圖片,直接放入 FLASH 中,好吧,沒關係練功不分時間,這次不但一次讀取多張圖片,並且加入限制使用者只可以開啟影像類型的檔案,並且限定副檔名的類型。

image

首先我們來介紹限制檔案類型,我們用 FileFilter 來實作,並且使用陣列的方式,傳入 browse 的方法中,可以同時使用多組的 FileFilter ,可以參考 Adobe docs 。

再來是讀取多個檔案就不是用上次的 FileReference 了,而是使用 FileReferenceList 這組類別,不過當選擇到檔案之後,還是必須使用迴圈並且利用 FileReference 做每個檔案的 load 方法。

image 

注意 : FLEX SDK 4 & Flash Player 10 需要 !

LoadAllPics.mxml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" fontSize="16" xmlns:net="flash.net.*">
	<mx:Script>
		<![CDATA[
			import mx.collections.ArrayCollection;
			//儲存圖片的陣列物件
			[Bindable]
			public var ac:ArrayCollection = new ArrayCollection();
 
			//將 frlist 所有的陣列內的檔案做一次 LOAD
			private function selectHandler(evnet:Event):void{
				//逐次將 fileList 內的檔案都 load 一次
				for(var i:int=0;i<this.frlist.fileList.length;i++){
					//建立一個暫時的 fileReference 來做送出的動作
					var fr_temp:FileReference = new FileReference();
					//取得檔案
					fr_temp = this.frlist.fileList[i];
					//加入檔案 load 完成的偵聽動作
					fr_temp.addEventListener(Event.COMPLETE,completeHandler);
					//執行讀取
					fr_temp.load();
				}
			}
			//完成後將讀取完成的資料塞入物件,物件再轉存到陣列中保留
			private function completeHandler(event:Event):void{
				//之前是直接讀取 fr 物件內的資訊
				//但是因為現在沒有固定宣告所以需要用 event 所拿到的資料
				var obj:Object = new Object();
				obj.filename = event.currentTarget.name;
				obj.data = event.currentTarget.data;
				this.ac.addItem(obj);
			}
			//打開瀏覽動作
			private function clickHandler():void{
				//設定資料型態過濾只接受 圖片格式
				var imagesFilter:FileFilter = new FileFilter("Images", "*.jpg;*.gif;*.png");
				this.frlist.browse([imagesFilter]);
			}
			//點擊到  dataGrid 內的物件,將被點擊的 DATA 套用到 IMAGE 上
			private function itemClickHandler():void{
				this.image.source = this.dg.selectedItem.data;
			}
		]]>
	</mx:Script>
 
	<mx:HBox width="810">
		<mx:VBox width="200" height="100%" horizontalAlign="center">
			<mx:Button label="讀取圖片" click="clickHandler()"/>
			<mx:DataGrid id="dg" width="100%" height="100%" dataProvider="{this.ac}" itemClick="itemClickHandler()">
				<mx:columns>
					<mx:DataGridColumn headerText="檔案名稱" dataField="filename"/>
				</mx:columns>
			</mx:DataGrid>
		</mx:VBox>
		<mx:Canvas width="600" height="600" backgroundColor="white">
			<mx:Image id="image" width="100%" height="100%"/>
		</mx:Canvas>
	</mx:HBox>
	<!-- 一次選取多個檔案的類別 -->
	<net:FileReferenceList id="frlist" select="selectHandler(event)"/>
 
 
</mx:Application>

Random Posts

Loading…

:: 把這篇好文推到書籤網站與更多人分享吧 ::
  • funp
  • Hemidemi
  • YahooKimo
  • Google
  • udn
  • Haohao
  • Live

相關文章 :

Ausir FLEX, 程式設計 , , , , , , ,

  1. 2009年3月4日22:43 | #1

    呵呵~~要搞就要搞大一點~你說是吧!
    收下啦!

  2. 2009年3月4日22:54 | #2

    還好你沒說你這是在 ” 為民口舌 ” @@~

  3. 阿芃
    2009年5月17日21:37 | #3

    請問一下 我們試跑程式的時候
    只要是有.load的地方就會出錯
    可是我們不知道是哪裡有問題

    Severity and Description Path Resource Location Creation Time Id
    1061: 呼叫可能未定義的方法 load (透過靜態類型 flash.net:FileReference 的參考)。 MSN_photo/src MSN_photo.mxml line 21 1242567236363 27

    類似這樣
    謝謝你!!!

  4. 阿芃
    2009年5月17日21:40 | #4

    請問一下 我們想要學習這項功能
    可是只要是有.load的地方就會出錯
    Severity and Description Path Resource Location Creation Time Id
    1061: 呼叫可能未定義的方法 load (透過靜態類型 flash.net:FileReference 的參考)。 MSN_photo/src MSN_photo.mxml line 21 1242567236363 27

    類似這樣 可以請問我們是那裏有問題嘛
    謝謝你 非常感激^^

  5. 2009年5月17日22:09 | #5

    @阿芃

    .load 方法
    你必須要先設定 flash player 是 10 以上喔

    不然 .load 會出錯

  6. 阿芃
    2009年7月31日15:01 | #6

    不好意思我又來問問題了

    目前我使用老師您寫的功能
    可是希望可以把上傳的圖片用縮圖的方式顯示在datagrid
    我用了itemRenderer還是沒有辦法讀出縮圖
    我把object改成image也一樣抓不到
    obj.data = event.currentTarget.data; —>這一行

    想請問老師可以怎樣修改它?謝謝老師^^

  7. 2009年7月31日17:46 | #7

    @阿芃

    你可以說明的在清楚一點嗎?
    這樣子我聽不太懂 ^^

  8. 阿芃
    2009年8月5日10:56 | #8

    我們希望可以上傳照片以後
    datagrid裡面顯示的不是照片的名稱 而是上傳的那張圖的縮圖
    不知道有沒有辦法達成

    非常非常的感謝您!!!!!!!

  9. 2009年8月5日13:10 | #9

    @阿芃

    我已經幫你實作出來
    請看最近的文章喔~

  10. milk
    2009年9月14日14:44 | #10

    不好意思我又回來問問題了>”<
    想要請問關於arraycollection的問題
    我把image加入arraycollection裡面,然後我去抓image的index
    但是我不管怎麼抓都會抓到最後一個的index
    想請問有甚麼方法可以抓到每一個image的index呢??
    謝謝^^

  11. 2009年9月14日15:02 | #11

    @milk

    耶….
    要貼一下你的程式碼嗎?~

    如果你是用 array.getItemIndex(object) 應該是可以正確拿出 INDEX 阿

  1. 本篇文章目前尚無任何 trackbacks 和 pingbacks。