Jsp 如何在将图像上载到JavaEE中的文件夹时修复以下FileNotFoundException?
自己解决-解决方案如下 我正在尝试将图像上传到服务器目录中(而不是数据库中的字节),因为我不想将图像存储到MySQL中。但是,我没有得到我想要的图像上传,并且在服务器日志中有FileNotFoundException。下面我上传文件的servlet代码有什么问题。是getRealPath(“”)导致了问题吗?如果是,解决方案或替代方案是什么。如果这不是我现在得到的原因,请帮助我知道我的错误。 这是我的servlet版本的正确方法吗?我想我有ServletAPI 3.0或更高版本。如果我错了,请告诉我 我正在使用的平台 安装到C:\Program文件的Netbeans 8.0.2 Glassfish 4.1提取至G:\Glassfish 4\ 项目位置E:\NetBeansProjects 这是我的glassfish服务器日志Jsp 如何在将图像上载到JavaEE中的文件夹时修复以下FileNotFoundException?,jsp,jakarta-ee,servlets,netbeans,glassfish,Jsp,Jakarta Ee,Servlets,Netbeans,Glassfish,自己解决-解决方案如下 我正在尝试将图像上传到服务器目录中(而不是数据库中的字节),因为我不想将图像存储到MySQL中。但是,我没有得到我想要的图像上传,并且在服务器日志中有FileNotFoundException。下面我上传文件的servlet代码有什么问题。是getRealPath(“”)导致了问题吗?如果是,解决方案或替代方案是什么。如果这不是我现在得到的原因,请帮助我知道我的错误。 这是我的servlet版本的正确方法吗?我想我有ServletAPI 3.0或更高版本。如果我错了,请告
java.io.FileNotFoundException: G:\glassfish4\glassfish\domains\domain1\generated\jsp\e-Shop\E:\NetBeansProjects\e-Shop\build\web\img\products\Untitled.png (The filename, directory name, or volume label syntax is incorrect)
这是我的servlet上传代码的一部分
else if (userPath.contains("/admin/uploadCategory")){
String SAVE_DIR = "/img/categories";
// gets absolute path of the web application
String appPath = request.getServletContext().getRealPath("");
// constructs path of the directory to save uploaded file
String savePath = appPath + File.separator + SAVE_DIR;
// creates the save directory if it does not exists
File fileSaveDir = new File(savePath);
if (!fileSaveDir.exists()) {
fileSaveDir.mkdir();
}
for (Part part : request.getParts()) {
String fileName = extractFileName(part);
part.write(savePath + File.separator + fileName);
}
request.setAttribute("message", "Upload has been done successfully!");
getServletContext().getRequestDispatcher("/admin/message.jsp").forward(
request, response);
}
else if (userPath.contains("/admin/uploadProduct")){
String SAVE_DIR = "/img/products";
// gets absolute path of the web application
String appPath = request.getServletContext().getRealPath("");
// constructs path of the directory to save uploaded file
String savePath = appPath + File.separator + SAVE_DIR;
// creates the save directory if it does not exists
File fileSaveDir = new File(savePath);
if (!fileSaveDir.exists()) {
fileSaveDir.mkdir();
}
for (Part part : request.getParts()) {
String fileName = extractFileName(part);
part.write(savePath + File.separator + fileName);
}
request.setAttribute("message", "Upload has been done successfully!");
getServletContext().getRequestDispatcher("/admin/message.jsp").forward(
request, response);
}
我自己就这样解决了
else if (userPath.contains("/admin/uploadProduct")){
String fileName="";
String SAVE_DIR = "/img/products";
try {
Part filePart = request.getPart("file");
fileName = getFileName(filePart);
String applicationPath = request.getServletContext().getRealPath("");
String basePath = applicationPath + File.separator + SAVE_DIR + File.separator;
InputStream inputStream = null;
OutputStream outputStream = null;
try {
File outputFilePath = new File(basePath + fileName);
inputStream = filePart.getInputStream();
outputStream = new FileOutputStream(outputFilePath);
int read = 0;
final byte[] bytes = new byte[1024];
while ((read = inputStream.read(bytes)) != -1){
outputStream.write(bytes, 0, read);
}
}catch (Exception e){
e.toString();
fileName = "";
}finally {
if (outputStream != null){
outputStream.close();
}
if (inputStream != null){
inputStream.close();
}
}
}catch (Exception e){
e.toString();
fileName = "";
}
//return fileName;
}
不知何故,您的路径中既有
g
驱动器,也有e
驱动器。显然,它只能是其中之一。服务器安装在G驱动器中。。项目目录位于E驱动器上。我不认为是这样。可能是这样,但是没有一条路径可以包含两个驱动器,所以是这样。好的。那么为什么Netbeans提供了这样的功能来更改项目目录呢?请帮我理解一下。如果我把项目移到g:,它会工作吗?有没有办法从项目目录中获取相对路径而不是getRealPath。@developerwjk你错了,我让它在相同的平台设置下工作。E:上G:Netbeans项目目录上的Glassfish和c:上的Netbeans IDE。你需要更新自己。我使用inputstream使其工作。。