我在Heroku上部署了一个服务,它产生一个pdf文件输出。当我在浏览器中点击URL时,我可以下载pdf文件(根据我的要求,我没有提示保存,它会自动保存到代码中定义的路径)。所以服务已经启动并可用。但是当我使用HttpURLConnection访问它时,我得到404错误。有人能帮我解决这个问题吗?
以下是我正在访问的链接: http://quiet-savannah-7144.herokuapp.com/services/time/temp 以下是在Heroku服务器上部署的服务代码:
注意:我的文件位于 webapp/static/temp.pdf 的位置。
客户端代码如下:
我尝试了以下内容类型:pdf和x-pdf,但都无效。
当我在我的机器上本地部署Tomcat服务器时,一切都非常好。 我已经挣扎了6个小时来解决这个问题,但是没有头绪。 实际上,我必须在android AsyncTask中获取它。 如果我能够在java中做到这一点,那么我就可以在android中实现相同的功能。 有人能帮助我吗?
提前感谢。
以下是我正在访问的链接: http://quiet-savannah-7144.herokuapp.com/services/time/temp 以下是在Heroku服务器上部署的服务代码:
@jawax.ws.rs.core.Context
ServletContext context;
@GET
@path("/temp")
@Produces("application/pdf")
public Response getPdf() throws IOException{
InputStream is = context.getResourceAsStream("/static/temp.pdf");
ResponseBuilder res = Response.ok(is);
res.header("Content-Disposition","attachment; filename=temp.pdf");
return res.build();
}
注意:我的文件位于 webapp/static/temp.pdf 的位置。
客户端代码如下:
try {
URL url = new URL("http://quiet-savannah-7144.herokuapp.com/sevices/time/temp");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("GET");
conn.setRequestProperty("Content-Type", "application/json");
int code = conn.getResponseCode();
System.out.println("code>>"+code+"<<");
if (conn.getResponseCode() == 200) {
System.out.println("*************************done****************************");
InputStream inputStream = conn.getInputStream();
OutputStream output = new FileOutputStream("D:/copyOfTest.pdf");
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
output.write(buffer, 0, bytesRead);
}
output.close();
} else {
Scanner scanner = new Scanner(conn.getErrorStream());
while(scanner.hasNext())
System.out.println(scanner.next());
scanner.close();
}
conn.disconnect();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
我尝试了以下内容类型:pdf和x-pdf,但都无效。
conn.setRequestProperty("Content-Type", "application/pdf");
conn.setRequestProperty("Content-Type", "application/x-pdf");
当我在我的机器上本地部署Tomcat服务器时,一切都非常好。 我已经挣扎了6个小时来解决这个问题,但是没有头绪。 实际上,我必须在android AsyncTask中获取它。 如果我能够在java中做到这一点,那么我就可以在android中实现相同的功能。 有人能帮助我吗?
提前感谢。
conn.setDoOutput(true)
和content-type
这两条语句,并添加了con.setProperty("Accept", "*")
,但仍然无法正常工作,仍然出现404错误。为什么在本地部署时可以正常运行? - HJK