【发布时间】:2018-11-02 19:25:29
【问题描述】:
我已经尝试了下面的代码,它适用于小文件。
URL url = new URL(downloadLink);
ReadableByteChannel rbc = Channels.newChannel(url.openStream());
FileOutputStream fos = new FileOutputStream(newFile);
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
fos.close();
rbc.close();
如果文件是大文件,则会给出如下错误:
java.io.IOException:Server returned HTTP response code: 400 for URL:https://dl.dropboxusercontent.com/1/view/79q8i6f9zqx7y2w/Paragliding in Himalayas.avi
谁能帮帮我。
【问题讨论】:
-
“大”有多大,HTTP 响应是否包含除 400 代码之外的任何其他有用信息?
-
200MB 文件大小。 java.io.IOException:服务器返回 HTTP 响应代码:400 for URL:XXXXXX 仅抛出此消息
-
这里有一个有趣的观察结果是
400状态码将在您开始实际读取文件的完整字节之前发送,这表明服务器对请求的某些部分不满意(例如标头发送)因此出现客户端错误。您能否提高应用程序的日志级别以显示正在发送的完整请求标头? -
您尝试下载的 URL 无效。 URL 不能包含空格。您需要对其进行 URL 编码:
https://dl.dropboxusercontent.com/1/view/79q8i6f9zqx7y2w/Paragliding%20in%20Himalayas.avi重要说明,您需要对机器名称之后的所有内容进行 URL 编码,否则,它也会对协议进行编码。 -
@JasonArmstrong,感谢您的建议,一切正常。如果您将您的建议作为答案发布,我会接受并为它投票。
标签: java