ファイルのアップロード要求を処理するために、サーブレットを使用してコーディングしています。
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>
誰でもこの問題を解決するのを手伝ってもらえますか?