/*
* FileUploadExAction
* 2004/07/04
*/
package testcl01.struts.action;
import java.io.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.*;
import org.apache.struts.upload.*;
import ushi.wui.WebFileNameUtil;
/**
* リクエスト・パラメータでアップロードされたファイルを受け取り、
* workディレクトリの下に格納します。
*/
public class FileUploadExAction extends Action {
/**
* パス修飾のあるファイル・パスから、パス修飾を削り、ファイル名だけを返します。
* 具体的には、パスの最後の/または\よりも後ろの部分だけを返します。
* 最後の文字が区切り文字だった場合、空文字列が返ります。
* @param path
* @return
*/
private static String getBaseName(String path) {
int index1 = path.lastIndexOf('\\');
int index2 = path.lastIndexOf('/');
int index;
if (index1 == -1) {
if (index2 == -1) {
// 区切り文字が現れなかったので、そのまま返す
return path;
} else {
index = index2;
}
} else {
if (index2 == -1) {
index = index1;
} else {
// 区切り文字が両方あったので、より後ろの方を採用
index = (index1 > index2) ? index1 : index2;
}
}
return path.substring(index + 1);
}
/**
* リクエスト・パラメータを受け取り処理をします。
*/
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
DynaActionForm fb = (DynaActionForm) form;
FormFile ff = (FormFile) fb.get("fileName");
/* 出力先ディレクトリの確定 */
WebFileNameUtil wu = new WebFileNameUtil(getServlet().getServletContext(), request);
String storeDir = wu.getRealPath("/work");
String clientFileName = ff.getFileName();
long size = ff.getFileSize();
InputStream is = ff.getInputStream();
if (size > 0) {
String outputPath = storeDir + "/" + getBaseName(clientFileName);
OutputStream bos = new FileOutputStream(outputPath);
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = is.read(buffer, 0, 8192)) != -1) {
bos.write(buffer, 0, bytesRead);
}
bos.close();
}
return mapping.findForward("success");
}
}
|