显示文件:找不到媒体类型的 MessageBodyReader=application/octet-stream
Displaying file: MessageBodyReader not found for media type=application/octet-stream
我的要求是我应该使用 RESTFul 服务显示文件。我是如何进行的:
服务器:
@GET
@Path("/{name}")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response getFile {
...
return Response.ok(inputStream).header("Content-Disposition", "attachment; filename=" + fileName).build();
客户:
final WebTarget target = createRestClient("path/" + fileName, new HashMap<String, Object>());
return target.request(MediaType.APPLICATION_OCTET_STREAM).get().readEntity(Part.class);
当我 运行 它时,我遇到了这个错误:
MessageBodyReader not found for media type=application/octet-stream, type=interface javax.servlet.http.Part, genericType=interface javax.servlet.http.Part.
你知道这是从哪里来的吗?
谢谢。
javax.servlet.http.Part
应该用来获取上传的multipart数据,由servlet容器创建,你从HttpServletRequest
获取。它不应该以这种方式使用。除了数据甚至不是多部分。
相反,您可以简单地从 Response
中获取 InputStream
,并从 header 中明确获取 Content-Dispostion
。像
Response response = target.request()
.accept(MediaType.APPLICATION_OCTET_STREAM)
.get();
// get InputStream
InputStream is = response.readEntity(InputStream.class);
// get Content-Disposition header
String contentDisposition = (String)response
.getHeaderString(HttpHeaders.CONTENT_DISPOSITION);
// get filename
contentDisposition = contentDisposition
.substring(contentDisposition.indexOf("filename=") + "filename".length() + 1);
System.out.println(contentDisposition);
我的要求是我应该使用 RESTFul 服务显示文件。我是如何进行的:
服务器:
@GET
@Path("/{name}")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response getFile {
...
return Response.ok(inputStream).header("Content-Disposition", "attachment; filename=" + fileName).build();
客户:
final WebTarget target = createRestClient("path/" + fileName, new HashMap<String, Object>());
return target.request(MediaType.APPLICATION_OCTET_STREAM).get().readEntity(Part.class);
当我 运行 它时,我遇到了这个错误:
MessageBodyReader not found for media type=application/octet-stream, type=interface javax.servlet.http.Part, genericType=interface javax.servlet.http.Part.
你知道这是从哪里来的吗?
谢谢。
javax.servlet.http.Part
应该用来获取上传的multipart数据,由servlet容器创建,你从HttpServletRequest
获取。它不应该以这种方式使用。除了数据甚至不是多部分。
相反,您可以简单地从 Response
中获取 InputStream
,并从 header 中明确获取 Content-Dispostion
。像
Response response = target.request()
.accept(MediaType.APPLICATION_OCTET_STREAM)
.get();
// get InputStream
InputStream is = response.readEntity(InputStream.class);
// get Content-Disposition header
String contentDisposition = (String)response
.getHeaderString(HttpHeaders.CONTENT_DISPOSITION);
// get filename
contentDisposition = contentDisposition
.substring(contentDisposition.indexOf("filename=") + "filename".length() + 1);
System.out.println(contentDisposition);