在Servlet 3.0中以编程方式访问MultiPartConfig

Vik*_*mov 6 java multipartform-data java-ee servlet-3.0

我使用Servlet 3 @MultiPartConfig注释在我的应用程序中实现文件上传.我需要在运行时设置multipart-config位置参数(而不是annotaion参数中的硬编码).是否有任何API可以编程访问servlet的multipart-config?

谢谢

小智 5

@MultiPartConfig实际上只是容器的标记接口.初始化servlet时,提供的注释值将使用代理对象映射到它.当传入请求是multipart/form-data时,上载的部分将映射到请求,容器将根据注释中的值和请求中的部分执行必要的工作.您无法拦截此过程,因为它全部发生在容器的内部.但是,有一种选择.它需要第二次执行文件系统操作.由于您拥有所有部件,因此您可以重建文件并将其"重新上传"到您选择的位置.它可能看起来像下面的方法.

@Override
protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse)
        throws ServletException, IOException {

    httpServletResponse.setContentType("text/html");
    PrintWriter printWriter = httpServletResponse.getWriter();

    InputStream inputStream;
    FileOutputStream fileOutputStream;

    for (Part part : httpServletRequest.getParts()) {

        inputStream = httpServletRequest.getPart(part.getName()).getInputStream();
        int i = inputStream.available();
        byte[] b = new byte[i];
        inputStream.read(b);
        String fileName = "";

        for (String temp : part.getHeader("content-disposition").split(";")) {
            if (temp.trim().startsWith("filename")) {
                fileName = temp.substring(temp.indexOf('=') + 1).trim().replace("\"", "");
            }
        }

        String uploadDir = "/temp";
        fileOutputStream = new FileOutputStream(uploadDir + "/" + fileName);
        fileOutputStream.write(b);
        inputStream.close();
        fileOutputStream.close();

        printWriter.write("Uploaded file " + uploadDir + "/" + fileName + ".");
    }
}
Run Code Online (Sandbox Code Playgroud)