文件正在错误的目录中上传

时间:2015-11-12 14:15:49

标签: java jsp servlet-3.0

我希望文件(用户头像图片)能够在myproject/src/webapp/WEB-INF/upload/avatars上传,而是在C:/WEB-INF/upload/avatars上传。不幸的是,我无法将位于C:/目录中的这些图片显示到jsp页面。 那么,我的代码有什么问题吗?这种做法也被认为是理想的吗?感谢

        String format = null;
        String fileName = null;
        String userName = userService.getLoggedInUsername();

        byte[] bytes = file.getBytes();

        // Get file extension
        fileName = file.getOriginalFilename();
        int index = fileName.lastIndexOf(".");
        if(index > 0){
            format = fileName.substring(index+1);
            format = format.toLowerCase();
        }

        // Creating the directory to store file
        String uploadPath = request.getSession().getServletContext().getInitParameter("file-upload");

        File dir = new File(uploadPath);
        if (!dir.exists())
            dir.mkdirs();

        // Create the file on server
        String filePath = uploadPath + File.separator + userName + "." + format;

        File serverFile = new File(filePath);
        BufferedOutputStream stream = new BufferedOutputStream(
                new FileOutputStream(serverFile));
        stream.write(bytes);
        stream.close();

        // Update photo path in db
        User user = new User();
        user.setUserName(userName);
        user.setUserPhotoPath(filePath);
        userService.insertPhotoPath(user);

web.xml参数:

<context-param> 
    <description>Location to store uploaded avatars</description> 
    <param-name>file-upload</param-name> 
    <param-value>
         /WEB-INF/upload/avatars
     </param-value> 
</context-param>

1 个答案:

答案 0 :(得分:0)

您可能需要使用ServletContext.getRealPath()将路径映射到应用程序,以便访问应用程序的本地文件夹。

这是因为Web应用程序在Web服务器上的虚拟路径下运行。

有关详细信息,请参阅ServletContext文档页面。