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


Using AsyncTask to download file from PHP site without any Open/Save dialog box

我的android应用程序上会有一个指向托管文件的服务器的链接。我希望我的应用程序在后台从服务器下载这个文件,这样用户就可以保持应用程序的焦点,并继续做他想做的事情。

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

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

据我所知,readfile()将从服务器获取数据,然后将其写入缓冲区。AsyncTask将从该缓冲区中读取并将其存储到指定的电话中的位置。

我的问题-1.一定要让我知道我的方法是否正确(如上所述)2.我假设标题("内容处置:..")将导致打开/保存对话框(与普通桌面浏览器对话框一样).当安卓应用程序也调用链接时,会显示类似的对话框吗?如果是的话,有没有办法不显示这个对话框,而是直接下载,这样用户就不必担心文件存储在手机中的位置了?

谢谢!

异步任务是让您在后台执行此任务。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();

然后,您可以对文本格式的内容执行您想要的操作。字符串生成器不是必须的,但这样可以得到一个干净的字符串。我认为你可以直接把它写到一个文件中,而不是构建一个字符串。

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

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()