- PR -

commons-fileuploadについて

1
投稿者投稿内容
はじめ
会議室デビュー日: 2006/07/07
投稿数: 1
投稿日時: 2006-07-07 01:24
はじめましてはじめともうします。

common-fileuploadを利用したファイルアップロードクラスを
作成したいのですが、うまくいきません。

commons-fileuploadのServletのサンプル(doPostメソッド
による処理)ではうまくいくのですが、目的としましては
HttpServletRequest,HttpServletResponse以外のパラメータも
受け取りたいので(保存ファイル名称とDBの主キーを受け取り
指定ファイル名での保存とDB登録を内部でやってしまいたい)
HttpServletのdoPostでは実現できないと思ったからです。

uploadClassの
List objLst=objDfu.parseRequest(request);
の値がnullになることまでは確認できましたが
なぜそうなるのかが分からない状態です。

大変恐縮ですがご指摘・ご教授の程お願いします。


---------------------------------
Action
---------------------------------
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import test.uploadClass;
public class testAction extends Action {
  public ActionForward execute(ActionMapping mapping,
  ActionForm form,
  HttpServletRequest request,
  HttpServletResponse response)throws Exception {

    // アップロードクラスをインスタンス化
    uploadClass uploadclass = new uploadClass();

    // アップロードを実行
    uploadclass.upload(request,response);
    return mapping.findForward("success");
  }
}
---------------------------------
ActionForm
---------------------------------
import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.struts.action.ActionForm;
import org.apache.struts.upload.FormFile;

public class testForm extends ActionForm{
    private DiskFileUpload files;

    public DiskFileUpload getFiles() {
      return files;
    }
    public void DiskFileUpload (DiskFileUpload files) {
      this.files = files;
    }
}
---------------------------------
uploadClass
---------------------------------
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;

public class uploadClass extends HttpServlet {
  public void upload(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException{

    //String path = getServletContext().getRealPath(".");
    String path = new String(".");
    DiskFileUpload objDfu = new DiskFileUpload();
    objDfu.setSizeMax(-1);
    objDfu.setSizeThreshold(1024);
    objDfu.setRepositoryPath(path);
    objDfu.setHeaderEncoding("Shift_JIS");

    try {
      List objLst=objDfu.parseRequest(request);
      Iterator objItr=objLst.iterator();
      while (objItr.hasNext()) {
        FileItem objFi=(FileItem)objItr.next();
        if (!objFi.isFormField()) {
          String strNam=objFi.getName();
          if (strNam!=null && !strNam.equals("")) {
            strNam=(new File(strNam)).getName();
            objFi.write(new File(path + "/" + strNam));
          }
        }
      }
    } catch (FileUploadException e) {
      e.printStackTrace();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2006-07-07 11:55
まず、よく意味がわからないのですが、Strutsを使っているのですよね?
でしたら、そもそもServletのdoPostを使うことはないと思うのですが。

Strutsを使っているのなら、FormFileクラスを使えばできると思うのですが、
使わない理由があるのですか?
1

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