- PR -

commons.fileuploadでファイル名だけを取得出来ない。

1
投稿者投稿内容
けい
会議室デビュー日: 2005/11/12
投稿数: 3
投稿日時: 2005-11-12 09:16
はじめて投稿する者ですが、自宅サーバーでサイトを構築してみたのですが、
アップロードしたファイルの名前取得が上手くいきません。
どなたか御指導をお願い致します。

サーバーの環境ですが、OS:Redhat8 DB:PostgerSql7.3.6 WebServer:Apache2
ApServer:tomcat4.1.31でcommons-fileupload-1.0を使用しています。

ソースの内容ですが、
import java.util.regex.*;
import java.util.List;
import java.util.Iterator;
import java.io.File;
import java.net.*;
import java.math.BigInteger;
import java.text.StringCharacterIterator;
import javax.servlet.http.*;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.fileupload.FileUploadException;
       ・
       ・
public String fileUpload( String strPath ){
String strFlNm = "";
DiskFileUpload dfu = new DiskFileUpload();
try {
dfu.setSizeMax(-1);
dfu.setSizeThreshold(4096);
dfu.setHeaderEncoding("EUC_JP");
dfu.setRepositoryPath( "/var/tmp" );

List lst = dfu.parseRequest(req);
Iterator iterator = lst.iterator();
while( iterator.hasNext() ){
FileItem fItem = ( FileItem )iterator.next();
if( !fItem.isFormField() ){
strFlNm = fItem.getName();
if( strFlNm != null && !strFlNm.equals("") ){
strFlNm = (new File(strFlNm)).getName();
fItem.write( new File( strPath + strFlNm ) );
}
}
}
}catch (FileUploadException e) {
boRtnCd = false;
}catch (Exception e) {
boRtnCd = false;
} finally {
return strFlNm;
}
}

いろんなサイトを参考して記述したのですが、ファイルのアップロードは上手くいっても
ファイルがフルパスでアップロードされています。
strFlNm = (new File(strFlNm)).getName();の記述でファイル名だけを取得出来る筈なのですが、フルパスで画像ファイルがおちています。

どなたか、御教授をお願い致します
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2005-11-13 01:38
引用:

けいさんの書き込み (2005-11-12 09:16) より:
strFlNm = (new File(strFlNm)).getName();


「フルパスで落ちています」の意味がよくわからないのですが、このコードが余分では?
けい
会議室デビュー日: 2005/11/12
投稿数: 3
投稿日時: 2005-11-13 02:21
「フルパスで落ちています」とは、クライアントのアップロードパスがつた状態のことです。例えば、クライアントにある画像(D:\Documents and Settings\keiichirou kouda\My Documents\image01.jpg)が、サーバー側の/opt/tomcat/webapps/cook/images/D:\Documents and Settings\keiichirou kouda\My Documents\image01.jpgでアップロードされるのです。

あと、strFlNm = (new File(strFlNm)).getName()の記述ですが、元々は上手くいかなくで
他のサイトを見て後で追加したものです。

とりあえず、どうしても上手くいかないので、強引にファイル名を修正することにしました。

intFind = strFlNm.lastIndexOf("\\");
if( intFind != -1 && strFlNm.length() > (intFind + 1) ){
strFlNm = strFlNm.substring((intFind + 1), strFlNm.length());
}
taka
会議室デビュー日: 2005/05/03
投稿数: 14
投稿日時: 2005-11-13 02:52
たいていのLinuxでは、パス区切り文字は/なので、Windowからアップロードしたファイルの
ファイル名からからFileオブジェクト作って、getNameしたところでそのまま帰ってくると思いますよ。
Linuxからアップロードしてたらうまくいくかもしれませんが。

[ メッセージ編集済み 編集者: taka 編集日時 2005-11-13 03:03 ]
けい
会議室デビュー日: 2005/11/12
投稿数: 3
投稿日時: 2005-11-13 03:37
あっ、そういうことですか。解かりました。ということは、
やっぱり、ファイル名だけ取得したい場合は、getName()だけではだめで、更に編集してファイル名だけをひっぱってくる必要があるのですね。

takaさんありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)