1



ファイルのアップロード要求を処理するために、サーブレットを使用してコーディングしています。
tuckey の UrlRewriteFilter を使用して URL を書き換え、サーブレット 3.0 の fileupload サポートを使用してファイルの保存操作を完了したいと考えています。

しかし問題は、UrlRewriteFilter がサーブレットにディスパッチした後、サーブレットが request.getParts() または request.getPart("partname") を呼び出してマルチパート データを受信できないことです。

urlrewrite.xml の xml コードは次のとおりです。

<rule>
    <note>处理文件上传请求</note>
    <condition type="method">POST</condition>
    <from>^/upload/(\w+?)/(\w+?)/([a-zA-Z_0-9/\.\-]*)$</from>
    <set type="parameter" name="db">$1</set>
    <set type="parameter" name="bucket">$2</set>
    <set type="parameter" name="filename">$3</set>
    <to>/servlet/uploadFileServlet</to>
</rule>

これは、ファイル アップロード サーブレットのメイン コードです。シンプルに見えます ^_^:

@WebServlet(urlPatterns = "/servlet/uploadFileServlet")
@MultipartConfig()
public class UploadFileServlet extends HttpServlet {

    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        Collection<Part> parts = request.getParts();

        System.out.println("parts : " + parts);
        System.out.println("params : " + request.getParameterMap());

        request.getPart("filepart").write("myfile.txt");
    }
}

ファイルを選択して送信するJspコードは次のとおりです。対比には 2 つの形式があります。最初のものはリクエストをサーブレットに直接送信し、サーブレットはマルチパートデータを受信できます。しかし、URL が urlrewrite ロールと一致する 2 番目のものは、サーブレットにディスパッチされ、サーブレットはマルチパート データを受信できません。これが問題です。

<form action="servlet/uploadFileServlet?db=game_dev&bucket=videos&filename=hello.txt"
    enctype="multipart/form-data" method="post">
    <input type="file" name="filepart" />
    <input type="text" name="myinfo" value="hello123下午好hello">
    <input type="submit" />
</form>
<form action="upload/game_dev/videos/helloworld.txt"
    enctype="multipart/form-data" method="post">
    <input type="file" name="filepart" />
    <input type="text" name="myinfo" value="hello456下午好lala">
    <input type="submit" />
</form>

誰でもこの問題を解決するのを手伝ってもらえますか?

4

0 に答える 0