你好,stackoverflow社区。我最近遇到了一个关于webhdfsrestapi的问题。
我在一个调用apacheknox的应用程序中有一个servlet来访问hdfs和hbase,这使得我无法使用配置文件和hadoop基类来解决问题。我有这个解决方案之前,安装诺克斯和它的工作很好,但我显然不能再使用这个了。
当我使用api读取带有 op=OPEN
操作它下载文件而不是仅仅显示它。这似乎很正常,当我直接要求通过一个网址,如 webhdfs/v1/path/to/storage/myPDF.pdf?op=OPEN
但当我试图从代码中调用此url时:
public byte[] requestDocumentKnox(String documentID, String documentType) {
byte[] response = null;
String surl = TSGVConstantes.KNOX_HDFS + SLASH + "v1" + SLASH + TSGVConstantes.HDFS_PATH + SLASH + documentID + "." + documentType + "?op=OPEN";
HttpURLConnection connection = null;
URL url;
try {
url = new URL(surl);
connection = (HttpURLConnection) url.openConnection();
String encoded = Base64.getEncoder().encodeToString((TSGVConstantes.HADOOP_USER + ":" + TSGVConstantes.KNOX_PASS).getBytes(StandardCharsets.UTF_8));
connection.setRequestMethod("GET");
connection.setDoOutput(true);
connection.setRequestProperty("Authorization", "Basic " + encoded);
if (connection.getResponseCode() != HTTP_CODE_OK) {
Trace.error(connection.getResponseCode() + " " + connection.getResponseMessage());
}
response = IOUtils.toByteArray(connection.getInputStream());
} catch (IOException ex) {
Trace.error(ex);
} finally {
if (connection != null) {
connection.disconnect();
}
}
return response;
}
private void returnDocument(HttpServletResponse response, byte[] document, String documentType) throws IOException {
ServletOutputStream output = null;
try {
output = response.getOutputStream();
if(document != null) {
response.setContentType(TSGVConstantes.getMimeTypeMap().get(documentType));
output.write(document);
} else {
// You don't need that
}
} catch (IOException ex) {
Trace.error(ex);
} finally {
response.flushBuffer();
if (output != null) {
output.close();
}
}
}
这两个方法都工作正常,它们被其他方法调用,文档参数来自 returnDocument()
是 byte[]
退回人 requestDocumentKnox()
调用之间没有对数组的修改。
这会显示pdf,但也会打开web浏览器的“打印”窗口,并告诉我可能无法正确显示pdf。
我的问题是:我需要去掉那个打印弹出窗口(和警告),因为我的应用程序在其他程序中被调用,以便显示hbase或hdfs中的pdf,我不能让这个弹出窗口出现。
你们中有人知道在使用 OPEN
手术?
如果是的话,有什么办法可以摆脱它吗?
或者我错过了完全不同的东西?
谢谢您。
更新
显然我的问题并没有出现在chrome和edge上,而只是出现在firefox上(60.6.2esr(32位))。以前没有在其他浏览器上尝试过,我觉得有点傻。我仍然不明白为什么,也找不到解决办法。
另一个更新
我发现了我的问题,检查我的答案。
1条答案
按热度按时间jljoyd4f1#
经过一番挖掘,我终于发现了。如果您在这里遇到同样的问题,您可能需要验证:
这种行为是否出现在其他浏览器上?对我来说没有。
此行为是否与其他文件一起出现?对我来说没有。
当您尝试从本地系统而不是浏览器打开文件时,是否会出现此行为?就我而言,的确如此。
结论:问题来自pdf和查看器。我没有其他PDF和其他观众的问题。它似乎来自adobeacrobat文档,因为当我试图在本地打开它时,打印弹出窗口也出现了。
希望这有帮助。
ps:你可能还想检查一下浏览器的设置,看看它是如何处理pdf的。这里有一个链接可以帮助firefox。