gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:18:18 26 4
gpt4 key购买 nike

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

谢谢

最佳答案

@MultiPartConfig 实际上只是容器的标记接口(interface)。当 servlet 被初始化时,提供的注解值通过代理对象映射到它。当传入请求是 multipart/form-data 时,上传的部分被映射到请求,容器根据注释的值和请求的部分执行必要的工作。您无法拦截此过程,因为这一切都发生在容器内部。但是,还有一种选择。它需要第二次执行文件系统操作。由于您拥有所有部分,您可以重建文件并将其“重新上传”到您选择的位置。它可能看起来像下面的方法。请记住,尽管我在自己的 servlet 中快速测试了它以演示概念,但它显然不是完成的代码:

@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 + ".");
}
}

关于java - 在 Servlet 3.0 中以编程方式访问 MultiPartConfig,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14044793/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com