下载托管在网站上的文件

时间:2016-02-25 14:38:42

标签: java android download

我正在尝试下载我在mega上托管的文件。代码如下:

AsyncTask.execute(new Runnable() {
            @Override
            public void run() {
                LoggerDebug.d("Prakhar", "Inside run");
                try {
                    URL downloadUrl = new URL(url);
                    HttpURLConnection httpURLConnection = (HttpURLConnection) downloadUrl.openConnection();

                    httpURLConnection.setRequestMethod("GET");
                    httpURLConnection.setDoOutput(true);

                    httpURLConnection.connect();

                    File SDCardRoot = Environment.getExternalStorageDirectory();
                    File downloadFile = new File(SDCardRoot, "downloaded.zip");

                    FileOutputStream fileOutputStream = new FileOutputStream(downloadFile);
                    InputStream inputStream = httpURLConnection.getInputStream();

                    int totalSize = httpURLConnection.getContentLength();
                    int downloadedSize = 0;

                    byte[] buffer = new byte[1024];
                    int bufferLength = 0;

                    LoggerDebug.d("Prakhar", String.valueOf(totalSize));
                    while ((bufferLength = inputStream.read(buffer)) > 0 ) {
                        LoggerDebug.d("Prakhar", String.valueOf(downloadedSize));
                        fileOutputStream.write(buffer, 0, bufferLength);
                        downloadedSize += bufferLength;
                    }

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
}

现在,在运行此代码示例后,我得到以下内容:

总大小为:-1 下载大小:1024 在移动设备上,我可以看到downloaded.zip文件,其大小为1.97KB,上传的原始大小为87.1KB

我哪里错了?

2 个答案:

答案 0 :(得分:0)

您是否尝试过更改:

while ((bufferLength = inputStream.read(buffer)) > 0 ) {

while ((bufferLength = inputStream.read(buffer)) != null) {

答案 1 :(得分:0)

所以我不知道你是否解决了你的问题,但我可以看到一些潜在的问题。

  1. setDoOutput(true)表示您将根据文档here上传。具体来说,它说:
  2.   

    要将数据上传到Web服务器,请使用setDoOutput(true).

    配置输出连接

    您不是从我所看到的内容上传,因此不需要这样做,并且不清楚服务器将如何响应,因为它似乎是您要求上传的功能。

    1. 返回-1表示EOF。您没有访问您想要的文件,可能是由于#3。

    2. 您可能无法直接从他们的网站下载。你需要以某种方式进行身份验证。这可以是API密钥,会话ID,yadda yadda。他们有自己的API,根据this document,他们的API通过电子邮件登录。该页面无法在GitHub中正确呈现,但您需要弄清楚如何登录。他们有一个Android应用程序示例,但看起来API都是本机代码。

相关问题