Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsp 如何在将图像上载到JavaEE中的文件夹时修复以下FileNotFoundException?_Jsp_Jakarta Ee_Servlets_Netbeans_Glassfish - Fatal编程技术网

Jsp 如何在将图像上载到JavaEE中的文件夹时修复以下FileNotFoundException?

Jsp 如何在将图像上载到JavaEE中的文件夹时修复以下FileNotFoundException?,jsp,jakarta-ee,servlets,netbeans,glassfish,Jsp,Jakarta Ee,Servlets,Netbeans,Glassfish,自己解决-解决方案如下 我正在尝试将图像上传到服务器目录中(而不是数据库中的字节),因为我不想将图像存储到MySQL中。但是,我没有得到我想要的图像上传,并且在服务器日志中有FileNotFoundException。下面我上传文件的servlet代码有什么问题。是getRealPath(“”)导致了问题吗?如果是,解决方案或替代方案是什么。如果这不是我现在得到的原因,请帮助我知道我的错误。 这是我的servlet版本的正确方法吗?我想我有ServletAPI 3.0或更高版本。如果我错了,请告

自己解决-解决方案如下

我正在尝试将图像上传到服务器目录中(而不是数据库中的字节),因为我不想将图像存储到MySQL中。但是,我没有得到我想要的图像上传,并且在服务器日志中有FileNotFoundException。下面我上传文件的servlet代码有什么问题。是getRealPath(“”)导致了问题吗?如果是,解决方案或替代方案是什么。如果这不是我现在得到的原因,请帮助我知道我的错误。 这是我的servlet版本的正确方法吗?我想我有ServletAPI 3.0或更高版本。如果我错了,请告诉我

我正在使用的平台 安装到C:\Program文件的Netbeans 8.0.2 Glassfish 4.1提取至G:\Glassfish 4\ 项目位置E:\NetBeansProjects

这是我的glassfish服务器日志

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使其工作。。