Servlet 3.0的MultipartConfig不能与UrlRewriteFilter一起使用?

时间:2013-07-15 13:16:46

标签: java servlets upload multipart tuckey-urlrewrite-filter



我现在用Servlet编写代码来处理文件上传请求 我使用tuckey的UrlRewriteFilter来帮助我重写URL,我想使用servlet 3.0的fileupload支持来完成文件保存操作。

但问题是,在UrlRewriteFilter对servlet进行调度之后,servlet无法通过调用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>

这是文件上传servlet的主要代码,看起来很简单^ _ ^:

@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代码。对比有两种形式。第一个直接向servlet发送请求,然后servlet可以接收多部分数据。但第二个,其url与urlrewrite角色匹配,调度到servlet,而servlet无法接收多部分数据,这就是问题。

<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>

任何人都可以帮我解决这个问题吗?

0 个答案:

没有答案