Java 如何从链接获得完整的视频下载?
我试图从一个链接下载一段视频,但它只下载了一小部分,所以根本无法观看。无论链接中的文件有多大,您如何下载整个视频Java 如何从链接获得完整的视频下载?,java,Java,我试图从一个链接下载一段视频,但它只下载了一小部分,所以根本无法观看。无论链接中的文件有多大,您如何下载整个视频 try { URL url; byte[] buf; int byteRead, byteWritten = 0; url = new URL(fAddress); outStream = new BufferedOutputStream(new FileOutputStream(destinat
try {
URL url;
byte[] buf;
int byteRead, byteWritten = 0;
url = new URL(fAddress);
outStream = new BufferedOutputStream(new FileOutputStream(destinationDir + "\\" + localFileName));
conn = url.openConnection();
is = conn.getInputStream();
buf = new byte[size];
while ((byteRead = is.read(buf)) != -1) {
outStream.write(buf, 0, byteRead);
byteWritten += byteRead;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
is.close();
outStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
看起来服务器可能会将您重定向到代码无法处理的其他位置。要获得最终位置,可以尝试以下方法(基于:): 现在你只需要改变
url = new URL(fAddress);
到
您确定此链接包含整个视频文件吗?@Pshemo是肯定的。为什么它看起来应该可以工作?是的,它对我来说很好(除了我没有下载视频,而是其他10Mb文件)。@Pshemo我试过下载一个视频,我相信它是26mb,但它只下载了6006字节。嗯,可能我结束程序太早了。是否有一种方法可以在消息完成后打印它,因为它在我关闭它之前打印完成。(打印语句在while循环之后)将该打印语句放在循环之后应该可以,并表明您下载并存储了所有发送数据(假设在负责关闭文件的
finally
块中抛出了非异常)。这表明服务器可能故意向您发送损坏的文件,或者您没有使用正确的地址/头(可能需要记录您的日志,以便cookie可能很重要;或者服务器可能需要正确的用户代理).好的,它现在正在运行我希望我知道如何加载bar@J.Doe然后,请随意提出新问题(就在您确保还没有使用搜索查询(如:)提出新问题之后)它起作用了。我不会问如何在这个网站上创建加载栏,它会很快关闭。@J.Doe你说得对,我们不喜欢在这里询问代码。但是询问代码的问题是可以的。所以试着先写它(找到关于它的示例/文章)如果你遇到问题,你可以问一个新问题。如果你描述得很好,可能会有人愿意帮助你。现在我能说的是:(1)要获得你下载的文件的大小(以字节为单位),你可以使用conn.getContentLengthLong()
(它将内容长度头的值返回为long
),(2)下载的字节数已经是字节写入的,所以您只需要在每次迭代中更新进度条。
url = new URL(fAddress);
url = new URL(getFinalLocation(fAddress));