关于下载文件中包含重定向问题的解决方案。
之前下载文件没问题,但是今天遇到一个下载文件里包含重定向,还是用之前的下载文件的方法就不行了,默认浏览器打开下载,是自动重定向的。
这是我以前的下载文件的代码:
class DownloadTask extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... params) {
String result = "";
OutputStream output = null;
try {
URL url = new URL(params[0]);
// 创建一个HttpURLConnection连接
URLConnection urlConn = (URLConnection ) url
.openConnection();
InputStream input = urlConn.getInputStream();
// 文件夹
File dir = new File(Constant.K0_VOICE_DIR);
if (!dir.exists()) {
dir.mkdirs();
}
// 本地文件
File file = new File(Constant.K0_VOICE_DIR + params[1]);
if (!file.exists()) {
file.createNewFile();
// 写入本地
output = new FileOutputStream(file);
result = file.getAbsolutePath();
byte buffer[] = new byte[4*1024];
int inputSize = -1;
while ((inputSize = input.read(buffer)) != -1) {
output.write(buffer, 0, inputSize);
}
output.flush();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
output.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return result;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onPostExecute(String result) {
//下载完成.....
super.onPostExecute(result);
}
}
按照这个下载,你会发现下载的例如mp3
会无法播放,点开查看:
< a href="https:xxxx">Moved Permanently</ a>.
href
里包含一个新的链接。需要添加如下代码,获取新的链接地址下载:
URLConnection urlConn = (URLConnection ) url
.openConnection();
//下载的文件中含有重定向链接
String redirect = urlConn.getHeaderField("Location");
if (redirect != null){
urlConn = new URL(redirect).openConnection();
}
奉上我在 stackoverflow
上找到的答案:
网友评论