【问题标题】:HTTP error when uploading .pdf, .doc or .docx. files with primefaces upload tool上传 .pdf、.doc 或 .docx 时出现 HTTP 错误。使用 primefaces 上传工具的文件
【发布时间】:2011-07-25 03:37:29
【问题描述】:

我从昨天开始使用 Primefaces 上传工具,但今天我开始使用不同的文件扩展名对其进行测试。令我惊讶的是,我可以成功上传的唯一文件是 .txt 我不明白为什么会这样。我在网上看到了代码片段,我认为我的代码几乎相同。我错过了什么吗?

这里有更多信息:

这是错误:

警告: StandardWrapperValve[Faces Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet 抛出异常 java.io.IOException:处理多部分/表单数据请求失败。 \uploaded\upload_3be1503c_12f00f7e117__7ffb_00000007.tmp(系统找不到指定的路径) 在 org.primefaces.webapp.MultipartRequest.parseRequest(MultipartRequest.java:67) 在 org.primefaces.webapp.MultipartRequest.(MultipartRequest.java:49)

这是JSF的代码

<h:form enctype="multipart/form-data">

  <!-- New Upload tool -->
        <p:fileUpload fileUploadListener="#{uploadController.handleFileUpload}"   
        allowTypes="*.doc;*.docx;*.pdf;*.odt;" description="Text"/>

</h:form>

这是托管 bean 代码的一部分

            public void handleFileUpload(FileUploadEvent event) {

    uploadedFile = event.getFile();
    String fileName = FilenameUtils.getName(uploadedFile.getFileName());
    String contentType = uploadedFile.getContentType();
    byte[] bytes = uploadedFile.getContents();

    Garbage garbage = new Garbage();
    garbage.setFilename(fileName);
    garbage.setFile(bytes);
    garbage.setDescription("info about the file");
    garbage.setFileType("File extension");
    fileUploaderEJB.uploadGarbage(garbage);

    FacesContext.getCurrentInstance().addMessage(
            null,
            new FacesMessage(String.format(
                    "File '%s' of type '%s' successfully uploaded!",
                    fileName, contentType)));
}

以防万一,web.xml 中与 primefaces 相关的 sutuff

<servlet>
<servlet-name>Resource Servlet</servlet-name>
<servlet-class>org.primefaces.resource.ResourceServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Resource Servlet</servlet-name>
<url-pattern>/primefaces_resource/*</url-pattern>
</servlet-mapping> 
 <filter>
    <filter-name>PrimeFaces FileUpload Filter</filter-name>
    <filter-class>org.primefaces.webapp.filter.FileUploadFilter
    </filter-class>
    <init-param>
        <param-name>uploadDirectory</param-name>
        <param-value>/uploaded</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>PrimeFaces FileUpload Filter</filter-name>
    <servlet-name>Faces Servlet</servlet-name>
</filter-mapping>

【问题讨论】:

    标签: java jsf jakarta-ee jsf-2 primefaces


    【解决方案1】:

    \uploaded\upload_3be1503c_12f00f7e117__7ffb_00000007.tmp(系统找不到指定的路径)

    与您的网络服务器安装位置相同的根磁盘上的文件夹/uploaded 丢失。创建它。

    【讨论】:

    • 我必须在应用服务器旁边创建那个文件夹吗?我上传的文件夹位于 WEB-INF/uploaded 我想将上传设置到那个地方,我应该在 web.xml 的 /uploaded 中添加什么?你认为这是个好主意吗?
    • 是的,您必须在安装网络服务器的同一根磁盘上创建它。如果您根本不想拥有固定的上传文件夹,只需删除整个&lt;init-param&gt;uploadDirectory。 PrimeFaces 然后将使用网络服务器的临时存储。您只需自己将上传内容移动/复制到更永久的位置。
    • 我确实删除了hold init-param,正如你所说的,它现在工作正常。谢谢! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-06
    • 2016-04-25
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    • 2023-03-24
    • 2012-07-21
    相关资源
    最近更新 更多