gpt4 book ai didi

jsf - 如何在JSF中保存上传的文件

转载 作者:行者123 更新时间:2023-12-02 08:29:54 25 4
gpt4 key购买 nike

我正在 JSF 中上传文件。我正在使用战斧的<t:inputFileUpload>为此,但同样的问题也适用于例如PrimeFaces <p:fileUpload>和 JSF 2.2 <h:inputFile> .

我有以下支持 bean 代码:

private UploadedFile uploadedFile; // +getter+setter

public String save() throws IOException {
String name = uploadedFile.getName();
System.out.println("File name: " + name);

String type = uploadedFile.getContentType();
System.out.println("File type: " + type);

long size = uploadedFile.getSize();
System.out.println("File size: " + size);

InputStream stream = uploadedFile.getInputStream();
byte[] buffer = new byte[(int) size];
stream.read(buffer, 0, (int) size);
stream.close();
}

我能够获取文件名、类型和大小,但无法将此文件保存在特定路径。我不知道保存上传文件的正确方法。我怎样才能实现这个目标?

最佳答案

上传文件的getInputStream()方法代表文件内容。

InputStream input = uploadedFile.getInputStream();

您需要将其复制到文件中。您首先应在本地磁盘文件系统上准备一个文件夹,用于存储上传的文件。例如,/path/to/uploads(在 Windows 上,它将与服务器运行所在的磁盘位于同一磁盘上)。请注意,您不应该使用硬编码路径或 Web 相对路径或 getRealPath()绝对将文件存储在展开的 WAR 文件夹甚至 IDE 项目的文件夹中。这里提到的原因Uploaded image only available after refreshing the page .

然后,您需要自动生成文件名。否则,当其他人稍后上传同名文件时,该文件就会被覆盖。您可以使用 Files#createTempFile()获取自动生成的文件名的工具。

Path folder = Paths.get("/path/to/uploads");
String filename = FilenameUtils.getBaseName(uploadedFile.getName());
String extension = FilenameUtils.getExtension(uploadedFile.getName());
Path file = Files.createTempFile(folder, filename + "-", "." + extension);

如有必要,可以根据本问答中显示的几种方式之一对上传路径进行参数化:Recommended way to save uploaded files in a servlet applicationFilenameUtils 是 Apache Commons IO 的一部分,您应该已经在类路径中拥有它,因为它是 Tomahawk 文件上传组件的依赖项。

最后,将上传的文件流式传输到该文件(假设是 Java 7):

try (InputStream input = uploadedFile.getInputStream()) {
Files.copy(input, file, StandardCopyOption.REPLACE_EXISTING);
}

System.out.println("Uploaded file successfully saved in " + file);

然后,要将其下载回来,最简单的方法是将 /path/to/uploads 注册为新的 Web 应用程序上下文或虚拟主机,以便所有这些文件都可以通过 URL 访问。另请参阅Load images from outside of webapps / webcontext / deploy folder using <h:graphicImage> or <img> tag .

关于jsf - 如何在JSF中保存上传的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14211843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com