2010년 4월 9일 금요일

FileReference _ (1) 파일 업로드 (PHP-APM 서버 연동)

파일 업로드 예제를 만들기 전에 필요한 것들이 몇가지 있다. 파일을 올릴 서버가 필요하며, 서버랑 연동할 php파일이 필요하다.

 

먼저 웹 서버를 구축 해보자. 웹 서버로 APMSETUP을 사용하겠다.

 

APMSETUP은 APM(Aphach, PHP, MySQL)를 사용할 수 있도록 자동으로 설치, 설정해주는 프로그램이다.

 

1. 주소창에 http://www.apmsetup.com  이라고 쳐보자.

 

 

위와 같은 화면이 나온다. 그럼 저기에서  다운로드 메뉴를 클릭해보자.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

그럼 위와 같이 APMSETUP을 다운받아보자. 다운로드를 클릭하고 저장을 누른다.

APMSETUP을 실행시켜보자. 그럼 아래 그림 그림 같이 나온다.

 

 

언어를 선택하고 오케이를 누르면 아래와 같은 화면이 나온다.

 

 

다음 버튼을 계속누른다. 알아서 세팅이 된다. 그럼 마지막에 아래와 같이 나온다.

 

 

마침을 누른다. 와~! 드디어 설치가 완료되었다. 바탕화면과 작업표시줄을 확인해보자.

 

 

 

 

자 이제 그럼 로컬 서버가 잘 구축되었는지 확인해보자.

 

주소창에 http://127.0.0.1 을 쳐보자. 그럼 아래와 같이 나온다. 이것이 개인 로컬 서버이다.

 

 

위치는 C:/APM_Setup/htdocs 이다.

 

 

즉, 127.0.0.1의 위치는 C:/APM_Setup/htdocs 폴더가 된다.

 

자 이제 준비는 다 끝났다. 그럼 이제 파일 업로드를 한번 만들어보자.

 

위의 그림 같이 C:/APM_Setup/htdocs 폴더 안에 upload파일을 하나 만들자.

 

이 폴더는 업로드한 파일이 올려질 폴더이다.

 

그리고나서 서버랑 연동할 upload.php 파일을 만들자.

 

먼저 upload.php 파일을 작성해 보자.

 

[code as3]
<?php
$errors = array();
$data = "";
$success = "false";

function return_result($success,$errors,$data) {
echo("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
?>

<results>
<success><?=$success;?></success>
<?=$data;?>
<?=echo_errors($errors);?>
</results>

<?
}

function echo_errors($errors) {
for($i=0;$i<count($errors);$i++) {

?>

<error><?=$errors[$i];?></error>

<?
}
}
switch($_REQUEST['action']) {
case "upload":

$file_temp = $_FILES['file']['tmp_name'];
$file_name = $_FILES['file']['name'];
$file_path = $_SERVER['DOCUMENT_ROOT']."/upload";

//checks for duplicate files
if(!file_exists($file_path."/".$file_name)) {
     //complete upload
     $filestatus = move_uploaded_file($file_temp,$file_path."/".$file_name);

     if(!$filestatus) {
     $success = "false";
     array_push($errors,"Upload failed. Please try again.");
     }
}
else {
$success = "false";
array_push($errors,"File already exists on server.");
}
break;

default:
$success = "false";
array_push($errors,"No action was requested.");
}
return_result($success,$errors,$data);
?>
[/code]

 

그럼 이제 FileUploadExample.as 파일을 작성해 보도록하자.

 

[code as3]
package
{
import flash.display.Sprite;
import flash.events.*;
import flash.net.FileFilter;
import flash.net.FileReference;
import flash.net.URLRequest;
import flash.net.URLVariables;
import flash.net.URLRequestMethod;

public class FileUploadExample extends Sprite
{
  private const UPLOAD_HOST:String = "http://127.0.0.1/upload.php";

 public function FileUploadExample()
 {
  super();
  setButton();
 }

 private var uploadURL:URLRequest;

 private var file:FileReference;

 private function setButton():void
 {
  select_btn.label = "Select";
  upload_btn.label = "Upload";

  select_btn.addEventListener(MouseEvent.CLICK, selectButtonClickHandler);
  upload_btn.addEventListener(MouseEvent.CLICK, uploadButtonClickHandler);
 }

 private function configureListener():void
 {
  file.addEventListener(IOErrorEvent.IO_ERROR, fileIOErrorHandler);
  file.addEventListener(ProgressEvent.PROGRESS, fileProgressHandler);
  file.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, fileDataUploadCompleteHandler);
  file.addEventListener(Event.SELECT, fileSelectHandler);
 }

 private function selectButtonClickHandler(event:MouseEvent):void
 {
  if(!file)
  {
   file = new FileReference();
  }
   configureListener();

   file.browse();  
 }

 private function uploadButtonClickHandler(event:MouseEvent):void
 {
   var requestData:URLVariables = new URLVariables();
   requestData.action = "upload";

   var request:URLRequest = new URLRequest(UPLOAD_HOST);
   request.method = URLRequestMethod.POST;
   request.data = requestData;

   file.upload(request, "file");
 }

 private function fileIOErrorHandler(event:IOErrorEvent):void
 {
  trace("File upload IO Error 발생.", "Error");
 }

 private function fileProgressHandler(event:ProgressEvent):void
 {
  var file:FileReference = FileReference(event.target);
  trace("progressHandler name=" + file.name + " bytesLoaded=" + event.bytesLoaded + " bytesTotal=" + event.bytesTotal);
 }

 private function fileDataUploadCompleteHandler(event:DataEvent):void
 {
  var xmlData:XML = new XML(event.data);

  if(xmlData.success == "true")
  {
   trace("File Upload Complete", "Success");
  }
  else
  {
   trace(xmlData.error, "Error");
  }
 }

 private function fileSelectHandler(event:Event):void
 {
  select_btn.enabled = true;
  fname_txt.text = file.name;
  fsize_txt.text = file.size + "bytes";
  ftype_txt.text = file.type;
 }
}
}
[/code]

 

 

 

 

자 이제 실행해보자. 그럼 C:/APM_Setup/htdocs/upload 폴더 안에 업로드한  파일이 올라갔을 것이다. 참고로, 여기서는 실행이되지 않으며, APMSETUP을 설치한 분들만 업로드가 가능하다.  

 

 

댓글 없음:

댓글 쓰기