感谢 Raghunandan 的建议,我得到了答案。
在这里我需要额外调用来获取下载文件的标题信息。在标题部分,我得到了文件的名称。
我还发现这个来自 URL 的文件名不包含文件名后缀帖子,通过该帖子我获得了有关标题详细信息的更多详细信息,我们可以在请求时获得这些详细信息。
因为我们可以使用它URLUtil.guessFileName(url, null, null)
,但这将为我的情况给出调用方法的文件名,我有这样的 url
misc/dnload.php?t1=MzQ0MDA=&t2=MTY5NTUz&t3=MTY5NTUzMTMwMjEyMDNfcGhhcm1hY3kga2V5IGluZm8ucG5n&t4=MTMwMjEyMDM=
因此,从上面的链接中,这将提取dnload.php作为文件名,它不是我们下载的原始文件名,它只是为该文件创建了下载链接。
这是使用它的代码,我们可以获取文件名,它只是一个额外的调用来获取信息,但实际上我们下载,为了下载,我使用 android 内置 api 到 DownloadManager 来下载文件。
Content-Disposition this is the attribute in header section through which we can get the file name as in attachment form.
它将以这种方式返回信息,Content-Disposition: attachment; filename="fname.ext"
所以现在只需要提取文件名
class GetFileInfo extends AsyncTask<String, Integer, String>
{
protected String doInBackground(String... urls)
{
URL url;
String filename = null;
try {
url = new URL(urls[0]);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.connect();
conn.setInstanceFollowRedirects(false);
String depo = conn.getHeaderField("Content-Disposition");
String depoSplit[] = depo.split("filename=");
filename = depoSplit[1].replace("filename=", "").replace("\"", "").trim();
} catch (MalformedURLException e1) {
e1.printStackTrace();
} catch (IOException e) {
}
return filename;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute();
// use result as file name
}
}