感谢Raghunandan的建议,我得到了答案.
在这里,我需要额外的调用来获取下载文件的标题信息.在标题部分,我得到了文件的名称.
因为我们可以使用这个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
{
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
}
}