繁体   English   中英

使用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.我假设header(“ Content-Disposition:..)将导致OPEN / SAVE对话框(如(如果是普通的桌面浏览器对话框)。android应用程序调用链接时也会显示类似的对话框吗?如果是,是否有某种方式不显示此对话框而只是下载,因此用户不需要麻烦文件存储在手机中的位置了吗?

谢谢!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM