上传的文件无法保存,Java中没有抛出异常 - Jersey

时间:2017-02-21 00:37:47

标签: java linux tomcat jersey

我正在尝试将文件上传到Restful - 部署在Tomcat服务器上的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组,并授予该路径的所有权限,但没有任何结果。 感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

  1. 由于路径位于war体外,因此必须在tomcat目录的server.xml文件中指明。
  2. 目录组必须与Tomcat组相同,可以通过linux终端中的chgrp命令进行更改。
  3. 必须使用linux中的chmod命令将权限授予目录组。