Java URL中的文件名不包含文件名后缀
我需要从URL下载一个文件,但我不知道该文件的类型,并且我使用的URL末尾没有/random.file,因此我无法解析文件名的URL。 目前,我正在使用Android下载管理器,它工作得非常好,这意味着我没有处理下载的权限,但我看不到从下载的文件中获取文件名。例如,如果我在Firefox中加载相同的url,它会询问“下载文件:Nameoffile.extension”Java URL中的文件名不包含文件名后缀,java,android,http,url,filenames,Java,Android,Http,Url,Filenames,我需要从URL下载一个文件,但我不知道该文件的类型,并且我使用的URL末尾没有/random.file,因此我无法解析文件名的URL。 目前,我正在使用Android下载管理器,它工作得非常好,这意味着我没有处理下载的权限,但我看不到从下载的文件中获取文件名。例如,如果我在Firefox中加载相同的url,它会询问“下载文件:Nameoffile.extension” 在下载文件之前,是否有办法复制这种行为并获取文件名?您最好阅读响应上的HTTP内容类型标题,并确定它是什么类型的文件。文件扩展名
在下载文件之前,是否有办法复制这种行为并获取文件名?您最好阅读响应上的HTTP
内容类型
标题,并确定它是什么类型的文件。文件扩展名不保证文件的类型<代码>内容配置:附件;filename=“fname.ext”是另一种方法,如果您指定了文件名,则可以使用该方法。查看以了解更多信息。您最好阅读响应上的HTTP内容类型
标题,并确定它是什么类型的文件。文件扩展名不保证文件的类型<代码>内容配置:附件;filename=“fname.ext”是另一种方法,如果您指定了文件名,则可以使用该方法。查看以获取更多信息。我最终使用ASyncTask手动检索文件名并将其传递给下载管理器,如果它对任何人都有帮助的话,这就是我如何做到的(在实际下载文件之前,我的url经历了许多重定向):
类GetFileInfo扩展了异步任务
{
受保护的字符串doInBackground(字符串…URL)
{
网址;
字符串文件名=null;
试一试{
url=新url(url[0]);
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
连接();
conn.setInstanceFollow(假);
试一试{
对于(int i=0;i<10;i++)
{
url=新url(conn.getHeaderField(“位置”);
conn=(HttpURLConnection)url.openConnection();
连接();
conn.setInstanceFollow(假);
}
}捕获(例外e){
}
字符串depo=conn.getHeaderField(“内容处置”);
字符串depoSplit[]=depo.split(“;”);
int size=depoSplit.length;
对于(int i=0;i
我最终使用ASyncTask手动检索文件名并将其传递给下载管理器(如果有帮助的话),我就是这样做的(在实际下载文件之前,我的url经历了多次重定向):
类GetFileInfo扩展了异步任务
{
受保护的字符串doInBackground(字符串…URL)
{
网址;
字符串文件名=null;
试一试{
url=新url(url[0]);
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
连接();
conn.setInstanceFollow(假);
试一试{
对于(int i=0;i<10;i++)
{
url=新url(conn.getHeaderField(“位置”);
conn=(HttpURLConnection)url.openConnection();
连接();
conn.setInstanceFollow(假);
}
}捕获(例外e){
}
字符串depo=conn.getHeaderField(“内容处置”);
字符串depoSplit[]=depo.split(“;”);
int size=depoSplit.length;
对于(int i=0;i
感谢我最后所做的一切:-)感谢我最后所做的一切:-)内容配置的解析非常原始,对于边缘情况和非ASCII字符都会失败。内容配置的解析非常原始,对于边缘情况和非ASCII字符都会失败。
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);
try {
for(int i = 0; i < 10; i++)
{
url = new URL(conn.getHeaderField("Location"));
conn = (HttpURLConnection) url.openConnection();
conn.connect();
conn.setInstanceFollowRedirects(false);
}
} catch (Exception e) {
}
String depo = conn.getHeaderField("Content-Disposition");
String depoSplit[] = depo.split(";");
int size = depoSplit.length;
for(int i = 0; i < size; i++)
{
if(depoSplit[i].startsWith("filename="))
{
filename = depoSplit[i].replace("filename=", "").replace("\"", "").trim();
Global.error(filename);
i = size;
}
}
} catch (MalformedURLException e1) {
e1.printStackTrace();
} catch (IOException e) {
}
return filename;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onProgressUpdate(Integer... progress) {
super.onProgressUpdate(progress);
}
}