Moved Permanently

关于下载文件中包含重定向问题的解决方案。
之前下载文件没问题,但是今天遇到一个下载文件里包含重定向,还是用之前的下载文件的方法就不行了,默认浏览器打开下载,是自动重定向的。

这是我以前的下载文件的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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 会无法播放,点开查看:

1
< a href="https:xxxx">Moved Permanently</ a>.

href 里包含一个新的链接。需要添加如下代码,获取新的链接地址下载:

1
2
3
4
5
6
7
 URLConnection urlConn = (URLConnection ) url
.openConnection();
//下载的文件中含有重定向链接
String redirect = urlConn.getHeaderField("Location");
if (redirect != null){
urlConn = new URL(redirect).openConnection();
}

奉上我在 stackoverflow 上找到的答案:
image.png

-------------本文结束感谢您的阅读-------------