0

ブラウジングでアップロードされたファイルを読み込もうとしています。そのために、Apache Commons fileupload jar を使用しています。したがって、プロジェクト アプリケーションで実行する前に、ファイルを正常に読み取るサーブレット/jsp POC プロジェクトを実行するだけです。以下はコードです、

protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

        boolean isMultipart = FileUpload.isMultipartContent(request);
        String content = "";

        try {
            if (isMultipart) {
                FileItemFactory factory = new DefaultFileItemFactory();
                FileUploadBase upload = new FileUpload(factory);
                String[] arr;
                List items;

                items = upload.parseRequest(request);

                Iterator iter = items.iterator();
                while (iter.hasNext()) {
                    FileItem item = (FileItem) iter.next();
                    if (!item.isFormField()) {
                        BufferedInputStream buff = new    BufferedInputStream(
                                item.getInputStream());
                        byte[] bytes = new byte[buff.available()];
                        buff.read(bytes, 0, bytes.length);
                        content = new String(bytes);
                        arr = content.split(",");

                    }
                }
            }

            request.getRequestDispatcher("success.jsp").forward(request,
                    response);
        } catch (FileUploadException e) {

        }

プロジェクトディレクトリにそのバージョンのjarがあり、Java 1.4を使用しているため、jarバージョン1.1を使用しました。Java 1.5 では、 FileUpload の代わりに ServletFileUpload を使用することを想定しています。しかし、以前のバージョンのjarでどこで作業できるかは問題ではないと思います。

struts 1.1を使用する実際のアプリケーションで使用すると問題が発生します。すべて問題ないようですが、リクエストを解析するときにアイテムを返しません。

アイテム = upload.parseRequest(リクエスト);

項目はここでは空です。

したがって、私が見つけることができる違いは、結果を示すPOCプロジェクトが、実際のアプリケーションがStrutsを使用しているJSP /サーブレットプロジェクトであることです。

この場合、JSP/Servlet と Struts プロジェクトでリクエストは異なりますか?

どちらの場合も、フォームで以下を使用します。

<form action="SampleWeb" method="post" enctype="multipart/form-data">
<input type="file" name="datafile" size="40">
<input type="submit" value="Submit">

以下は、Struts アプリケーションでの唯一の追加です。

    <action
        path="/ReportsAction"
        type="come.test.ReportsAction"
        name="ReportsForm"
        scope="request"
        validate="false"
        parameter="dispatch">
        <forward name="success" path="/reports/A.jsp"/>
        <forward name="updatesuccess" path="/common/B.jsp"/>              
    </action>
4

1 に答える 1

1

リクエストはリクエストです。

ただし、Struts 1 を使用している場合は、実際には Struts 1 を使用してください。

フォーム、Java 側

プロパティで を使用ActionFormFormFileます。

public class YourForm extends ActionForm {
private FormFile file; // Plus public getter/setter
    // Etc.
}

コンテンツ タイプの検証なども実行できます。

public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
    if (!"text/plain".equals(getFile().getContentType())) {
        // etc.

フォーム、JSP 側

<html:form action="/uploadAction" method="post" enctype="multipart/form-data">
  <html:file property="file" />
  <!-- Etc... -->

アクション

アクションでは、ファイルを最終的な宛先にコピーする必要があります ( webapp の外部。構成パラメーターを使用して、ファイルの最終的な場所を定義します)。いくつかのチュートリアルで示されているように、アクションですべての作業を行うのではなく、ユーティリティ ライブラリを使用してコピー (または移動、おそらくいくつかのオプションがある) を行うことを検討してください。

http://www.mkyong.com/struts/struts-file-upload-example/

環境間で同じ手法をやみくもに使用しないでください。この作業は自動的に処理されます。

また、新しいプロジェクトに Struts 1 を使用しないでください。これはかなり古く、Struts 2 や Spring MVC などの最新のオプションよりもはるかに使いにくい (Rails、Grails、Play などよりも使いにくい)。

于 2013-02-14T13:14:16.583 に答える