【问题标题】:Uploaded file fails to save with no exception thrown in Java - Jersey上传的文件无法保存,Java 中没有抛出异常 - 泽西岛
【发布时间】:2017-07-10 10:43:40
【问题描述】:

我正在尝试将文件上传到部署在 Tomcat 服务器上的 restful-Jersey Web 服务,该服务将上传的文件作为 multipart 接收。它在 Windows 操作系统上完全正确,但在 Linux 上,文件无法保存,以下保存方法没有抛出异常:

@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadProductImage(
        @FormDataParam("file") final InputStream uploadedInputStream,
        @FormDataParam("file") final FormDataContentDisposition cdh,
        @FormDataParam("file") final FormDataBodyPart body
) {
    FileManager fileManager = new FileManager();
    String fileName;

    try {
        int read = 0;
        byte[] bytes = new byte[1024];
        OutputStream out = new FileOutputStream(new File("/home/files"));

        while ((read = uploadedInputStream.read(bytes)) != -1) {
            out.write(bytes, 0, read);
        }
        out.flush();
        out.close();
    } catch (IOException e) {

        e.printStackTrace();
    }

    return Response.status(Response.Status.CREATED).entity(gson.toJson(cdh.getName())).build();
}

multipart 变量已在 web.xml 文件中声明为:

<init-param>
        <param-name>jersey.config.server.provider.classnames</param-name>
        <param-value>org.glassfish.jersey.media.multipart.MultiPartFeature</param-value>
    </init-param>

从代码中可以看出,目标路径是“/home/files”。
我确定该路径存在,并且我已经尝试将目标文件的所有者更改为 tomcat 组,并授予该路径的所有权限而没有任何结果。 感谢您的帮助。

【问题讨论】:

  • 我确定路径存在如果它确实存在,我会怀疑你是否有权限。请显示捕获您的异常的代码
  • uploadedInputStream 设置在哪里以及设置什么?如果它没有打开文件,那么显示将不起作用
  • 我在这次更新中展示了整个方法,因为它是上传文件,以前可能不存在。
  • 好的,我在你的代码中看不到任何明显的东西,所以我建议你调试它/或添加一些调试语句以确保它被调用以及它到达什么位置
  • 我已经说过它在 windows 上正常工作,这意味着它没有返回任何类型的内部错误,而且如果问题很简单,我不会在 SO 上发布它。文件发送正确我已经测试过了。

标签: java linux tomcat jersey


【解决方案1】:

所以在处理后发现文件写入失败或权限错误没有作为异常抛出,代码可以正常工作,在这种情况下可以采取以下措施解决此类问题:

  1. 由于路径位于战争主体之外,因此必须在 tomcat 目录中的 server.xml 文件中指明。
  2. 目录组必须和Tomcat组一致,可以在linux终端通过chgrp命令修改。
  3. 必须在 linux 中使用 chmod 命令授予目录组权限。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多