【发布时间】: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 上发布它。文件发送正确我已经测试过了。