下载用户';s文件通过PHP传输到Android设备
我要做的任务是下载一个特定用户的文件,例如名为“UserNo123.db”(不是纯文本文件),它位于私有目录中 android应用程序应根据使用该应用程序的用户传递所需文件的名称,然后下载该文件并将其保存在设备存储器的某个位置 用户ID->Android应用程序将ID发送到PHP脚本->PHP脚本使用ID获取文件->将其发送回应用程序->应用程序接收正确的文件并将其保存在本地目录中 我对php知之甚少,所以如果我犯了一些基本错误,我向您道歉下载用户';s文件通过PHP传输到Android设备,php,android,download,server,Php,Android,Download,Server,我要做的任务是下载一个特定用户的文件,例如名为“UserNo123.db”(不是纯文本文件),它位于私有目录中 android应用程序应根据使用该应用程序的用户传递所需文件的名称,然后下载该文件并将其保存在设备存储器的某个位置 用户ID->Android应用程序将ID发送到PHP脚本->PHP脚本使用ID获取文件->将其发送回应用程序->应用程序接收正确的文件并将其保存在本地目录中 我对php知之甚少,所以如果我犯了一些基本错误,我向您道歉 String path ="http://LO
String path ="http://LOCALHOST/testdownload.php";
URL u = null;
try {
u = new URL(path);
HttpURLConnection c = (HttpURLConnection) u.openConnection();
c.setRequestMethod("GET");
c.connect();
InputStream in = c.getInputStream();
final ByteArrayOutputStream bo = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
in.read(buffer); // Read from Buffer.
bo.write(buffer); // Write Into Buffer.
runOnUiThread(new Runnable() {
@Override
public void run() {
Log.d("READING",bo.toString());
try {
bo.close();
} catch (IOException e) {
e.printStackTrace();
}
}
});
PHP文件:
<?php
$attachment_location = "databases/test.txt";
if (file_exists($attachment_location)) {
header($_SERVER["SERVER_PROTOCOL"] . " 200 OK");
header("Cache-Control: public"); // needed for i.e.
header("Content-Type: application/txt");
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=\"" . basename($attachment_location) . "\"");
header("Content-Length:".filesize($attachment_location));
readfile($attachment_location);
die();
} else {
die("Error: File not found.");
}
?>
这就是我下载一个文件的原因,尽管出于某种原因,在尝试读取一个文本文件作为示例时,它给了我额外的字符,但至少现在没有错误
现在,据我所知,我希望我的请求方法是“POST”,这样我就可以发送所需的查询(用户id),在仍然获取文件的情况下,如何做到这一点
谢谢你你不需要邮寄来发送Id。GET也可以这样做<代码>字符串路径=”http://LOCALHOST/testdownload.php?id=abc123";代码>或
字符串路径=”http://LOCALHOST/testdownload.php?filename=abc123.txt“
从php脚本中删除die()。只有在出现问题时才使用die()。它会给我额外的字符
。请详细说明。应用程序收到正确的文件并将其保存在本地目录中
。然后不要在这两者之间使用ByteArrayOutputStream的。最好直接使用FileOutputStream
。谢谢!我曾经,我不知道我是怎么忘记的。。。至于额外的字符,它可能来自错误的内容类型,它现在工作正常,它曾经给我“textfilecontents”+我用FileOutputStream加载的符号,文件下载正确,再次感谢!到目前为止,它似乎工作得很好!虽然发生了一件奇怪的事情,我让BufferedReader读取输入流以获取是否有任何错误(未找到文件等),但当我这样做时,下载的数据库文件已损坏,并且当我用BufferedReader注释出检查部分时,下载工作正常且未损坏。我通过创建一个单独的php文件来检查文件是否存在而不打开它,然后创建一个单独的php文件来获取文件,每个文件都有不同的InputStream,它就工作了。您不需要POST来发送Id。get也可以这样做<代码>字符串路径=”http://LOCALHOST/testdownload.php?id=abc123";代码>或字符串路径=”http://LOCALHOST/testdownload.php?filename=abc123.txt“
从php脚本中删除die()。只有在出现问题时才使用die()。它会给我额外的字符
。请详细说明。应用程序收到正确的文件并将其保存在本地目录中
。然后不要在这两者之间使用ByteArrayOutputStream的。最好直接使用FileOutputStream
。谢谢!我曾经,我不知道我是怎么忘记的。。。至于额外的字符,它可能来自错误的内容类型,它现在工作正常,它曾经给我“textfilecontents”+我用FileOutputStream加载的符号,文件下载正确,再次感谢!到目前为止,它似乎工作得很好!虽然发生了一件奇怪的事情,我让BufferedReader读取输入流以获取是否有任何错误(未找到文件等),但当我这样做时,下载的数据库文件已损坏,并且当我用BufferedReader注释出检查部分时,下载工作正常且未损坏。我通过创建一个单独的php文件来检查文件是否存在而不打开它,然后创建一个单独的php文件来获取文件,每个文件都有一个不同的InputStream,这样就可以了。