2008年3月19日水曜日

アップロード最終(?)版

package application;



import java.io.*;

import java.util.Hashtable;

import java.util.Properties;



import javax.mail.BodyPart;

import javax.mail.Session;

import javax.mail.internet.MimeMessage;

import javax.mail.internet.MimeMultipart;

import javax.servlet.ServletException;

import javax.servlet.ServletInputStream;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;



import org.apache.log4j.Logger;





public class upload_app extends HttpServlet{

/**

*

*/

private static final long serialVersionUID = 1L;

private static Logger logger = Logger.getLogger(upload_app.class);



public void doGet(HttpServletRequest request, HttpServletResponse response)

throws IOException, ServletException{

// doGet、書いてやらねー(w

}



public void doPost(HttpServletRequest request, HttpServletResponse response)

throws IOException, ServletException{

logger.info("upload_app start");

request.setCharacterEncoding("UTF-8");



// ユーザID(仮)

String strUSERID = "Set_USER";



try {

// ファイルのアップロード



ServletInputStream is=request.getInputStream();

ByteArrayOutputStream baos=new ByteArrayOutputStream();

PrintStream ps=new PrintStream(baos,true);

ps.print("Content-Type: " + request.getContentType());

ps.println(System.getProperty("line.separator"));



// リクエストデータをバイナリとして読み込み、JavaMailの機能を利用して本体部分を取得。

int i;

while((i=is.read())!=-1){baos.write(i);}

Properties prop=System.getProperties();

Session sess=Session.getDefaultInstance(prop);

MimeMessage msg=new MimeMessage(sess,new ByteArrayInputStream(baos.toByteArray()));





MimeMultipart mm = (MimeMultipart)msg.getContent();

int mmcount = mm.getCount();



for(int l=0;l
{

BodyPart body = mm.getBodyPart(l);

// 取得したバイナリデータからファイル名の部分を取り出す。

// ヘッダ部分はContent-Disposition: ... filename="...upload.dat"のような形式になっている

String[] ary=body.getHeader("Content-Disposition");

//form-data; name="userid"

//form-data; name="fl"; filename="C:\Documents and Settings\ito\デスクトップ\新規ビットマップ イメージ.bmp"



Hashtable ht = new Hashtable();

Hashtable ht_hedparm = new Hashtable();

for(int j=0;j
{

String[] ary2 = ary[j].split(";");

for(int k=0;k
{

String[] parms = ary2[k].split("=");

ht.put(parms[0].trim(), parms.length==1?"":parms[1].trim());

}

}



if(ht.containsKey("filename"))

{

// ファイル名のあるBodyPartも名前を持っている

//String n = ht.get("name").toString();



// ファイル名取得(文字化け対応済utf-8で来るものと仮定 Win-tomcatで確認)

//String filename_fullpath = new String(ht.get("filename").toString().getBytes("iso-8859-1"), "utf-8");

//String filename = filename_fullpath.substring(filename_fullpath.lastIndexOf('\\')+1, filename_fullpath.length());



// 取得したデータ本体部分を、取得したファイル名で/フォルダに格納し、アップロード結果を出力

InputStream stream=body.getInputStream();

File fl=new File("C:\\test.bin");//ht.get("filename").toString()

FileOutputStream fos=new FileOutputStream(fl);

while((i=stream.read())!=-1){fos.write(i);}

fos.close();

}

else

{

// ファイル名が無いBodyPartから、通常のパラメータを取得

//String n = ht.get("name").toString();

InputStream stream=body.getInputStream();

ByteArrayOutputStream bao = new ByteArrayOutputStream();

while((i=stream.read())!=-1){bao.write(i);}

bao.close();

String parmval = bao.toString("utf-8");

ht_hedparm.put(ht.get("name").toString(), parmval);

//logger.info(ht.get("name").toString() + ":" + parmval);

}

}

} catch (Exception ex) {

// ログ出力

logger.fatal("USERID:" + strUSERID,ex);

}

}

}



0 件のコメント:

コメントを投稿