我正在尝试创建一个servlet来将文件上传到临时位置。当我构建文件路径时,一切似乎都没问题。
String uploadFilePath = System.getProperty(" java.io.tmpdir")+ File.separator + UPLOAD_DIR;
我得到绝对路径:C:\ Users \ victor \ AppData \ Local \ Temp \ uploads
但是当我打电话时
part.write(uploadFilePath + File.separator + fileName);
我得到: C:\ Users \ victor \ GlassFish_Server \ glassfish \ domains \ domain \ generated \ jsp \ pcpweb \ C:\ Users \ victor \ AppData \ Local \ Temp \ uploads
之后和一个java.io.FileNotFoundException,我猜得够多了。
所以"写"正在完成我的道路。我有办法避免这种情况吗? 感谢。
使用:glassfish和netbeans
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
// constructs path of the directory to save uploaded file
String uploadFilePath = System.getProperty("java.io.tmpdir") + File.separator + UPLOAD_DIR;
// creates the save directory if it does not exists
File fileSaveDir = new File(uploadFilePath);
if (!fileSaveDir.exists()) {
fileSaveDir.mkdirs();
}
System.out.println("Upload File Directory=" + fileSaveDir.getAbsolutePath());
String fileName = null;
//Get all the parts from request and write it to the file on server
for (Part part : request.getParts()) {
fileName = getFileName(part);
part.write(uploadFilePath + File.separator + fileName);
}
request.setAttribute("message", fileName + " File uploaded successfully!");
getServletContext().getRequestDispatcher("gerencia.jsp").forward(
request, response);
}
答案 0 :(得分:1)
Part.write()
的javadoc提到:
相对于中指定的位置创建文件 MultipartConfig
我的理解是,对于Glassfish,如果您没有指定位置,则默认值为:
getServletContext().getAttribute("javax.servlet.context.tempdir")
这可能是您看到的额外路径。
尝试在@MultipartConfig
注释中指定位置,例如:
@MultipartConfig(location="/somepath")
您可以将位置设置为临时目录的值,然后将裸文件名传递给write()
方法。