플래시에서 파일 데이터를 다중 업로드시 해결했던 방법을
주변에서 문의가 와서 기록 합니다.
(pc의 다중파일 업로드는 기본 파일레퍼런스 api에서 제공됩니다)
주변에서 문의가 와서 기록 합니다.
(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;
}
}
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;
}
}
댓글 없음:
댓글 쓰기