在我的应用中,我要求从网址下载mp3文件。我正在使用Async Task下载文件。出于测试目的,我将文件保存在Dropbox中。问题是,它没有下载完整的文件。实际文件大小为5 MB。但是,它只下载29 KB的数据。当我检查内容的长度时,它显示-1。我不知道问题出在哪里。下面,我发布了我的代码。
@Override
protected Void doInBackground(String... sUrl)
{
InputStream input = null;
OutputStream output = null;
try
{
URL link = new URL(sUrl[0]);
HttpURLConnection urlConnection = (HttpURLConnection)link.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setDoOutput(true);
urlConnection.connect();
int fileLength = urlConnection.getContentLength();
Log.v("Download file length", ""+fileLength);
input = urlConnection.getInputStream();
int downloadedSize = 0;
output = new FileOutputStream(Environment.getExternalStorageDirectory()
.getAbsolutePath()+"/audiofolder/1.mp3.mp3");
byte[] data = new byte[1024];
int bufferLength = 0;
while (((bufferLength = input.read(data)) > 0))
{
output.write(data, 0, bufferLength);
downloadedSize += bufferLength;
publishProgress((int)((downloadedSize/fileLength) * 100));
}//while
output.flush();
output.close();
input.close();
}//try
catch (MalformedURLException e)
{
e.printStackTrace();
}//catch
catch (IOException e)
{
e.printStackTrace();
}//catch
return null;
}//diInBackground
答案 0 :(得分:0)
在我的应用程序中,以下代码完美地运行。你可以尝试一下。
@Override
protected Void doInBackground(String... aurl) {
try {
URL url = new URL(aurl[0]);
URLConnection conexion = url.openConnection();
conexion.connect();
File file = new File("mnt/sdcard/");
file.mkdirs();
File outputfile = new File(file, title + ".mp3");
FileOutputStream fileOutput = new FileOutputStream(outputfile);
InputStream inputStream = conexion.getInputStream();
int totalSize = conexion.getContentLength();
int downloadedSize = 0;
byte[] buffer = new byte[1024];
int bufferLength = 0;
while ((bufferLength = inputStream.read(buffer)) != -1) {
downloadedSize += bufferLength;
onProgressUpdate((int) ((downloadedSize * 100) / totalSize));
fileOutput.write(buffer, 0, bufferLength);
}
fileOutput.close();
} catch (Exception e) {
download = true;
e.printStackTrace();
}
return null;
}
答案 1 :(得分:0)
检查您的链接。 当您看到内容的长度= -1时,表示链接标题中没有内容长度。它不会强制您的下载进度。 您只下载29KB因为它下载网站,.html不是文件mp3。 Yout可以将您的链接复制并粘贴到浏览器上以进行检查。
答案 2 :(得分:0)
来自Android文档:
https://developer.android.com/reference/java/net/URLConnection.html#getContentLength()
getContentLength返回:
此连接的URL引用的资源的内容长度,如果内容长度未知,或者内容长度大于Integer.MAX_VALUE,则为-1。