我现在用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>
任何人都可以帮我解决这个问题吗?