gpt4 book ai didi

java - 使用 HttpURLConnection 从 url 下载文件 |如果文件名包含空格,则为 HTTP 400

转载 作者:行者123 更新时间:2023-11-30 06:08:11 28 4
gpt4 key购买 nike

我正在尝试使用http连接从url(soap请求)下载文件,下面是我的代码,在执行时我得到http = 400,因为文件名包含空格(ac abc. pdf)

        String downloadFileName = "ac abc.pdf";
String saveDir = "D:/download";

String baseUrl = "abc.com/AttachmentDownload?Filename=";
URL url = new URL(baseUrl + downloadFileName);
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
connection.setReadTimeout(60 * 1000);
connection.setConnectTimeout(60 * 1000);

connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/octet-stream");
connection.setRequestProperty("SOAPAction", url.toString());

String userCredentials = "user:pass";
connection.setRequestProperty("Authorization", userCredentials);

connection.setDoInput(true);
connection.setDoOutput(true);

int responseCode = connection.getResponseCode();

if (responseCode == HttpURLConnection.HTTP_OK) {

try (InputStream inputStream = connection.getInputStream()) {
String saveFilePath = saveDir + downloadFileName;

try (FileOutputStream outputStream = new FileOutputStream(saveFilePath)) {
int bytesRead = -1;
byte[] buffer = new byte[BUFFER_SIZE];
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
}
}

执行上面的代码时得到以下输出

responsecode400
response messageBad Request
No file to download. Server replied HTTP code: 400

让我知道如何在上述情况下格式化 url

最佳答案

URL 中不能很好地容忍空格和其他一些符号。您需要对它们进行转义或编码更改您的代码

URL url = new URL(baseUrl + downloadFileName);

致:

URL url = new URL(baseUrl + URLEncoder.encode(downloadFileName, StandardCharsets.UTF_8.name());

这应该可以解决您的问题。此外,还有一些开源库可以为您解决问题。请参阅Apache commons这是一个流行的解决方案。另一个解决方案是 MgntUtils库(版本 1.5.0.2)。它包含 HttpClient 类,允许您做一些非常简单的事情:

httpClient.sendHttpRequestForBinaryResponse(baseUrl + URLEncoder.encode(downloadFileName, StandardCharsets.UTF_8.name()", HttpClient.HttpMethod.POST);

这将返回包含原始字节响应的 ByteBuffer。同一个类有方法 sendHttpRequest 来获取文本响应。如果失败,这两种方法都会抛出 IOException。以下是一篇文章的链接,该文章解释了如何获取 MgntUtils库以及它有哪些实用程序。文章中没有提到 HttpClient 类(它是一个新功能),但该库附带了编写良好的 javadoc。因此,请在该库中查找 HttpClient 类的 javadoc。

关于java - 使用 HttpURLConnection 从 url 下载文件 |如果文件名包含空格,则为 HTTP 400,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50832008/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com