我正在尝试下载我在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
我哪里错了?
答案 0 :(得分:0)
您是否尝试过更改:
while ((bufferLength = inputStream.read(buffer)) > 0 ) {
到
while ((bufferLength = inputStream.read(buffer)) != null) {
答案 1 :(得分:0)
所以我不知道你是否解决了你的问题,但我可以看到一些潜在的问题。
setDoOutput(true)
表示您将根据文档here上传。具体来说,它说:要将数据上传到Web服务器,请使用
配置输出连接setDoOutput(true).
您不是从我所看到的内容上传,因此不需要这样做,并且不清楚服务器将如何响应,因为它似乎是您要求上传的功能。
返回-1表示EOF。您没有访问您想要的文件,可能是由于#3。
您可能无法直接从他们的网站下载。你需要以某种方式进行身份验证。这可以是API密钥,会话ID,yadda yadda。他们有自己的API,根据this document,他们的API通过电子邮件登录。该页面无法在GitHub中正确呈现,但您需要弄清楚如何登录。他们有一个Android应用程序示例,但看起来API都是本机代码。