使用AsyncTask从PHP站点下载文件,无需任何打开/保存对话框

时间:2013-02-16 19:07:47

标签: php android android-asynctask download

我的Android应用程序上会有一个链接到托管文件的服务器。我希望我的应用程序在后台从服务器下载此文件,以便用户可以保持应用程序的焦点并继续执行他想要做的事情。

我假设可以使用AsyncTask在后台执行此操作。应用程序中的链接是一个php页面,其中包含以下代码 -

header("Content-type: application/xls");
header("Content-Disposition: attachment; filename=\myFile.xls\"");
readfile("myFile.xls"); 

据我所知,readfile()将从服务器获取数据,然后将其写入其缓冲区。并且AsyncTask将从此缓冲区读取并按指定的方式将其存储到手机中的位置。

我的问题 - 1.请告诉我我的方法是否正确(我上面所述) 2.我假设标题(“Content-Disposition:..”)将产生一个OPEN / SAVE对话框(如普通桌面浏览器对话框)。当链接被调用时,会显示类似的对话框也是一个Android应用程序?如果是的话,是否有人不显示此对话框而只是下载,以便用户无需打扰文件存储在手机中的哪个位置?

谢谢!

1 个答案:

答案 0 :(得分:1)

异步任务是让你在后台执行此操作。 PHP页面返回xml文件的内容。使用HttpGet获取内容,然后将其保存到您选择的位置。

HttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet ("http://urltopage.com/page");

HttpResponse response = httpclient.execute(httpget);
sb = new StringBuffer("");
in = new BufferedReader(new InputStreamReader(response
                        .getEntity().getContent()));

String line = "";
String NL = System.getProperty("line.separator");
while ((line = in.readLine()) != null) {
    sb.append(line + NL);

}
in.close();

然后,您现在可以使用文本格式对内容执行所需操作。 stringbuilder不是必须的,但是这样你就得到一个干净的字符串。我想你可以直接将它写入文件而不是构建字符串。

如果你想直接把它放到一个文件中:

FileOutputStream fos = new FileOutputStream(newFile("\path to file"));

byte[] buff = new byte[4096];
int len; 
while((len = in.read(buff)) > 0) {
      fos.write(buff, 0, len);
}


fos.close()