0

我目前正在研究这个问题。把这个问题放在这里,希望能看到一些很棒的见解。这是我的问题:

我正在开发一个 android 应用程序,它从我的网络服务器下载文件以显示在应用程序中,并可离线使用。

如果我的应用程序转到https://www.mydomain.com/abc/xyz.png下载文件,我怎样才能使相同的 url 不公开?即,如果您在浏览器地址栏中键入https://www.mydomain.com/abc/xyz.png,您将被带到除 png 文件之外的其他地方。

我想我需要某种包装器,但我对这一切都很陌生,并试图快速学习。

任何帮助表示赞赏。

对于它的价值,我将使用带有工作台 6.0 或 phpMyAdmin 的 mySql 数据库。

编辑

针对前两个响应:

所以我的代码在我的 android 应用程序中,我下载文件并将其保存到内部存储,如下所示(基本路径将我带到文件的 web 目录):

url = new URL(basePath + fileName);
URLConnection connection = url.openConnection();
int lenghtOfFile = connection.getContentLength();

inputStream = new BufferedInputStream(url.openStream());

outFile = new File(context.getFilesDir() + "/" + fileName);
fileStream = new FileOutputStream(outFile);

outputStream = new BufferedOutputStream(fileStream, DOWNLOAD_BUFFER_SIZE);

会改为说:

url = new URL(basePath + "download_file.php" + "?key=hardcodedkey&file=" + fileName);
URLConnection connection = url.openConnection();
int lenghtOfFile = connection.getContentLength();

inputStream = new BufferedInputStream(url.openStream());

outFile = new File(context.getFilesDir() + "/" + fileName);
fileStream = new FileOutputStream(outFile);

outputStream = new BufferedOutputStream(fileStream, DOWNLOAD_BUFFER_SIZE);
4

2 回答 2

0

一种简单的方法可能是使用某个密钥作为秘密参数和您要下载的图像或文件调用 php 脚本。

www.myweb.com/myfunction.php?pass=secretPassword&file=image.png

此密钥将在您的应用程序的调用中被硬编码。

然后您可以检查密码是否是您期望的密码,例如:

//hardcoded hashed pass with sha1, for example.
$myHashedPass = '40bd001563085fc35165329ea1ff5c5ecbdbbeef';

if(sha1($_GET['pass']) != $myHashedPass){
    die();
}

//download of file...

在 PHP 应用程序中,您可以根据密码开始下载或不下载。

于 2013-08-21T09:20:35.790 回答
0

您在这里有几个选择。

1.) 不太好-> .htaccess 来限制某些引荐来源,例如 Android 除外。

2.) Greater -> 如果 GET var 与 pass 相同,则使用 PHP 文件输出图像。例如

if (isset($_GET["pass"]) && $_GET["pass"]=="8h932mgks984jsolm9sjt4ms") {
    header('Content-type:image/png');
    include('/path/to/thePngFile.png');
} else die("nothing to see here..");
于 2013-08-21T09:24:52.263 回答