是否可以从服务器下载文件而不提供文件URL?

时间:2015-08-18 23:11:12

标签: android file security url download

我想知道是否可以在不提供特定文件URL的情况下下载文件 例如,在响应中创建 http请求是文件或文件的内容 我可以下载已经提供确切网址的文件 例如,txt file 但是,我接下来想要的是保护该网址并将其设为私有
如果有其他方式,请解释我

1 个答案:

答案 0 :(得分:0)

有一种方法可以在不使用http请求的情况下促进服务器 - 客户端通信,称为Apache Thrift。要实现您提出的目标 - “从服务器下载文件而不提供文件网址”,您可以执行以下操作:

  1. 下载Thrift,构建并安装Apache Thrift编译器

    您可以按照official website上的步骤操作。

  2. 编写.thrift文件(我的例子中,我把它命名为“test.thrift”)

    对于您的示例,您可以定义如下:

    service MyServer {
    
        binary getFileFromServer()
    
    }
    
  3. 然后,打开终端并运行

    thrift --gen java test.thrift
    

    我将获得一个“MyServer.java”文件,服务器/客户端都应包含此文件以供实施。假设您的服务器端已准备好以二进制文件提供文件数据。在Android应用程序中,您只需指定用于连接服务器的套接字,协议,传输,主机和端口。如果您想从服务器获取文件,只需使用您的Client对象调用“getFileFromServer()”,那么您可以获取文件的byte []。例如:

    public TSocket socket = new TSocket(your_host, your_port);
    public TFramedTransport transport = new TFramedTransport(socket);
    public TBinaryProtocol protocol = new TBinaryProtocol(transport);
    public Client myClient = new Client(protocol);
    

    调用线程从服务器获取文件:

    new Thread(new Runnable() {
        @Override
        public void run(){
    
            // this block should be wrapped with try/catch
    
            transport.open();
            byte[] myFileInByteArray = myClient.getFileFromServer();
            // your custom function for decoding
            decodeByteArrayIntoFile(myFileInByteArray);
            transport.close(); 
        }
    }).start();
    
  4. 以上是我能想到的唯一一种从服务器下载文件而不提供文件URL的方法,但您仍然需要先连接到服务器。希望这可以提供帮助。