【问题标题】:How to write uploaded file to a folder inside web project? [duplicate]如何将上传的文件写入 Web 项目内的文件夹? [复制]
【发布时间】:2012-02-14 11:58:37
【问题描述】:

我正在使用 Apache Commons File Uploader API。当我使用像 c:\\my uploads\\ 这样的绝对路径时,它可以成功运行。那就是文件将被上传到那个地方。

我正在使用 NetBeans 7 进行开发。在我的项目树中,我创建了另一个名为 uploads 的文件夹。所以当我使用像uploads//uploads/pics/ 这样的相对路径时,它不起作用。也就是说,没有错误。但文件未写入该文件夹。我正在使用“文件”对象并使用它的“write()”函数。

我的项目文件夹结构是这样的:

-- C:\
-- -- my project\
-- -- -- school\
-- -- -- -- web\
-- -- -- -- -- index.jsp
-- -- -- -- -- fileupload.jsp
-- -- -- -- -- uploads\
-- -- -- -- -- -- pics\

【问题讨论】:

    标签: jsp file-upload path


    【解决方案1】:

    您基本上需要通过ServletContext#getRealPath() 将相对Web 路径转换为绝对磁盘文件系统路径。

    String relativeWebPath = "/uploads";
    String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath);
    String filename = FilenameUtils.getName(item.getName());
    File file = new File(absoluteDiskPath, filename);
    // ...
    

    但是,绝对不推荐这种将上传文件写入扩展 WAR 文件夹的方法。当您重新部署 WAR 时,所有这些上传的文件都将丢失(仅仅是因为它们不包含在原始 WAR 中!)。当服务器配置为在内存而不是磁盘上扩展 WAR 时,它也将不起作用。然后getRealPath() 将返回null

    将上传的文件写入扩展的 WAR 文件夹之外的路径。你一开始就做对了。您始终可以通过将上传文件夹指定为 VM 参数或属性文件设置来配置上传文件夹。

    最后但同样重要的是,Java 代码属于 Java 类,而不是 JSP 文件。

    【讨论】:

    • 谢谢。我将使用“C:\\my uploads\\”作为位置。但是如何检查文件夹是否存在?如果不存在,则创建一个。 File 的对象包含 mkdir()。但它不接受路径。所以我很困惑
    • 只需拨打new File("C:/my uploads")即可。
    • 谢谢。我正在这样使用它。但我不知道它是这样工作的。
    • File 类确实是一个坏名字,因为大多数开发人员错误地认为它只能引用文件,不能引用文件夹。该类应命名为Path。他们已经在 J​​ava 7 中修复了它。
    • 我认为你完全没有抓住重点。只需创建File uploadFolder = new File("C:/my uploads") 并调用mkdir()(或更好,mkdirs())就可以了。您可以在 servlet 的初始化或其他过程中执行一次。然后你可以使用File uploadedFile = new File(uploadFolder, filename)
    猜你喜欢
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 2017-12-09
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    • 2016-01-15
    • 2014-09-28
    相关资源
    最近更新 更多