레이블이 flash인 게시물을 표시합니다. 모든 게시물 표시
레이블이 flash인 게시물을 표시합니다. 모든 게시물 표시

2010년 12월 28일 화요일

Flash 파일데이터 업로드시 인터렉션 없이 다중전송 처리방법

플래시에서 파일 데이터를 다중 업로드시 해결했던 방법을 
주변에서 문의가 와서 기록 합니다.
(pc의 다중파일 업로드는 기본 파일레퍼런스 api에서 제공됩니다)

프로젝트 진행하다 플래시의 여러 영역을 이미지로 개별적으로 저장해야 하는
작업이 있었다. 파일업로드(멀티파트가 포함된 리퀘스트)는 사용자의 인터렉션이 
꼭 있어야 함으로(보안이슈) base64인코팅으로 처리하는 방법들도 있지만 서버
단에서 다시 풀어야 하는 깔끔하지 못한 부분이 있다 

이를 해결해본 방법이 Flash에서 멀티파트 구성없이 리퀘스트의 URLVariable 데이터에
bytearray를 할당해서 호출하고 리퀘스트를 처리하는 서블릿에서 저장하는 방법으로 
다중업로드가 가능하다 

(java, php 모두 가능)

- 액션스크립스 코드 -
var byteArr:BytaArray = new ByteArray();//바이트 어레이를 구성 

var urlRQ:URLRequest = new URLRequest(url);
//헤더설정 
var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream"); 
urlRQ.requestHeaders.push(header);
urlRQ.requestHeaders.push( new URLRequestHeader( 'Cache-Control', 'no-cache' ) );



//리퀘스트 데이터에 byteArray 할당 
urlRQ.data = byteArr;


- 서블릿 코드 - 
package com.servlet;

import javax.servlet.http.HttpServlet;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.net.URL;

public class ImageWriter extends HttpServlet {

public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
    doGet(req, resp);
}

public void doGet(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException
    {

        int i = 0;
        int k = 0;
        int maxLength = req.getContentLength();
        byte[] bytes = null;
        if(0<=maxLength)
        {
            bytes = new byte[maxLength];
        }
        String method = req.getParameter("method");
        String name = req.getParameter("name");
        ServletInputStream si = req.getInputStream();
   
        while (true)
        {
            k = si.read(bytes,i,maxLength);
            i += k;
            if (k <= 0)
            break;
        }
        if (bytes != null)
        {
            File saveFile = new File(req.getSession().getServletContext().getRealPath(name));
            if(saveFile.exists())
                saveFile.createNewFile();
       
            System.out.println(req.getRealPath(name));
       
            FileOutputStream fos = new FileOutputStream(saveFile);
            fos.write(bytes);
            fos.flush();
            fos.close();
       
            resp.setContentType("text");
            resp.getWriter().write(name);
        }
        else
        {
            resp.setContentType("text");
            resp.getWriter().write("bytes is null");
        }
    }

private String String(int remotePort) {
    // TODO Auto-generated method stub
    return null;
}
}

2010년 11월 23일 화요일

플래시 동적 삽입 Flash import

그냥 그렇게 하는 거였지… 하면 나중에 잊어버릴 듯 하여 정리 해본다.

사용자의 요청,정보에 따라서 고정적인 swf가 아닌 상황마다 다르게 swf를 로드하고
파라미터를 추가 하는 등의 작업에 사용 되는 방식이다.

리눅스,Php환경에서 테스트
swfURL.php 는 실제 swf url을 헤더 변수로 담아 리턴 해주는 파일 이고
swfFILE.php 는 swf파일을 내려받기 형태로 스트림 해준다.

케이스
  1. 임베드되는 swf가 a.swf 일수도 b.swf 일수도 있는 상황
  2. a.swf?param=값 : 파라미터의 값이 외부(접속URL) 또는 DB의 값에 따라 다르게 처리 되어야 하는 경우
  3. html코드상에 swf주소를 노출 시키고 싶지 않을 경우
  4. 서비스중 swf 파일명이 빈번히 바뀌는 경우

활용 사례
  1. 유투브 :

    해당 URL접근시 서버의 리다이렉트 옵션을 활용하여 swf를 노출(.htaccess)


    해당 swf 파일을 내려 줌

player.html (swf 임베드)
    
    

swfURL.php (동적으로 URL을 구성하는 방식 파라미터를 추가해서 넘겨줌)
Header("Location:http://fe7270.ffcomputing.com/test/param.swf?param=123") ;
?>

swfFILE.php (3번 케이스에 해당 하는 방식 파라미터 없이 swf를 내려줌)
    if(!$file)
    {
        $file = "param.swf";
    }
    $dnfile = $file; //실제 파일명 또는 경로
    header("Content-Type: application/x-shockwave-flash");
    Header("Content-Length: ".(string)(filesize("$file")));
    //다운로드를 할지 html에 보여줄지 결정해주는 헤더
    //Header("Content-Disposition: attachment; filename=$dnfile");

    if (is_file("$file")) {
    $fp = fopen("$file", "rb");
    if (!fpassthru($fp))
        fclose($fp);
    } else {
        echo "해당 파일이나 경로가 존재하지 않습니다.";
    }
?>

2010년 9월 5일 일요일

AS3 네트워크 통신 스펙

네트워크 통신을 처리하는 클래스들이 어떤 프로토콜을 정확히
지원하는지 구분하기가 어려웠는데 이문서가 잘 정리되어 있다.

rtmp, rtmfp(player 10.1)프로토콜을 사용한 p2p서비스개발에 대한 리서치중
tcp - udp
fms 필요 - stratus 만으로 가능

http://help.adobe.com/ko_KR/as3/dev/WS5b3ccc516d4fbf351e63e3d118a9b8f6c0-7ffe.html