猿问

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

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

我正在JSF中上传一个文件。我用的是战斧<t:inputFileUpload>对于这一点,但同样的问题适用于例如PrimeFaces<p:fileUpload>和JSF 2.2<h:inputFile>.

我有以下支持bean代码:

private UploadedFile uploadedFile; // +getter+setterpublic 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();  }

我能够获得文件名、类型和大小,但无法将该文件保存在特定路径上。我想不出保存上传文件的正确方法。我怎样才能做到这一点?


Helenr
浏览 524回答 3
3回答

HUX布斯

这个getInputStream()方法表示文件内容。InputStream&nbsp;input&nbsp;=&nbsp;uploadedFile.getInputStream();你需要把它复制到一个文件中。首先,应在本地磁盘文件系统上准备一个文件夹,将上传的文件存储在该文件夹中。例如,/path/to/uploads(在Windows上,这将与服务器运行的磁盘相同)。注意你应该绝对不是使用相对路径或getRealPath()基于这里提到的原因上传的图像只有在刷新页面后才可用.然后,您需要自动生成文件名。否则,当其他人稍后上传同名文件时,它将被覆盖。你可以用Files#createTempFile()获取自动生成的文件名的工具。Path&nbsp;folder&nbsp;=&nbsp;Paths.get("/path/to/uploads");String&nbsp;filename&nbsp;=&nbsp;FilenameUtils.getBaseName(uploadedFile.getName()); &nbsp;String&nbsp;extension&nbsp;=&nbsp;FilenameUtils.getExtension(uploadedFile.getName()); &nbsp;Path&nbsp;file&nbsp;=&nbsp;Files.createTempFile(folder,&nbsp;filename&nbsp;+&nbsp;"-",&nbsp;"."&nbsp;+&nbsp;extension);如果有必要,上传路径可以根据以下问答中所示的几种方式之一进行参数化:推荐在servlet应用程序中保存上传的文件的方法..这个FilenameUtils是ApacheCommonsIO的一部分,因为它是Tomahawk文件上载组件的依赖项,所以您应该在类路径中拥有它。最后,只需将上传的文件流到该文件(假设Java 7):try&nbsp;(InputStream&nbsp;input&nbsp;=&nbsp;uploadedFile.getInputStream())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;Files.copy(input,&nbsp;file,&nbsp;StandardCopyOption.REPLACE_EXISTING);}System.out.println("Uploaded&nbsp;file&nbsp;successfully&nbsp;saved&nbsp;in&nbsp;"&nbsp;+&nbsp;file);然后,要下载回来,最简单的方法就是注册。/path/to/uploads作为一个新的webapp上下文或虚拟主机,这样所有这些文件都可以通过URL获得。另见使用<h:GraphicImage>或<img>标记从webapp/webtext/Deploy文件夹外部加载图像.
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答