【问题标题】:How do I save a large file from a URL to the local如何将大文件从 URL 保存到本地
【发布时间】: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


【解决方案1】:

您尝试下载的 URL 无效。 URL 不能包含空格。您需要对其进行 URL 编码:

https://dl.dropboxusercontent.com/1/view/79q8i6f9zqx7y2w/Paragliding%20in%20Himalayas.avi 

查看:how do I encode a complete http url String correctly?,了解对 URL 进行编码的方法。不幸的是,仅使用 URLEncoder.encode() 不会削减它,因为它会编码斜线等。

【讨论】:

    【解决方案2】:

    您可以使用 DownloadManager 将此任务交给 Os 自己

     private fun startDownload(url: String) {
        val request = DownloadManager.Request(Uri.parse(url))
        request.allowScanningByMediaScanner()
        request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
        request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, url.substring(url.lastIndexOf("/")))
        val dm = activity!!.getSystemService(DOWNLOAD_SERVICE) as DownloadManager
        dm.enqueue(request)
        Toast.makeText(getApplicationContext(), "Downloading File", Toast.LENGTH_LONG).show()
    }
    

    【讨论】:

    • 在我看来这不像 Java。
    猜你喜欢
    • 2016-03-13
    • 2011-01-16
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    相关资源
    最近更新 更多