Java 下载网站上托管的文件
我正在尝试下载一个我在mega上托管的文件。代码如下:Java 下载网站上托管的文件,java,android,download,Java,Android,Download,我正在尝试下载一个我在mega上托管的文件。代码如下: AsyncTask.execute(new Runnable() { @Override public void run() { LoggerDebug.d("Prakhar", "Inside run"); try { URL downloadUrl = new URL(url);
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
在手机上,我可以看到下载的.zip文件,它的大小是1.97KB
,上传的原始大小是87.1KB
我哪里出错了?您是否尝试过更改:
while ((bufferLength = inputStream.read(buffer)) > 0 ) {
到
所以我不知道你是否解决了你的问题,但我可以看到一些潜在的问题
setDoOutput(true)
表示您将根据文档进行上传。具体来说,它说:
要将数据上载到web服务器,请使用setDoOutput(true)配置输出连接。
你不是从我看到的上传,所以这是不必要的,而且不清楚服务器会如何响应,因为你似乎在请求上传功能
返回-1表示EOF。您没有访问您打算访问的文件,可能是因为#3
你可能不能随意从他们的网站下载。你需要以某种方式进行身份验证。这可能是API密钥、会话id、yadda-yadda。他们有自己的API,根据API中的电子邮件登录。该页面在GitHub中无法正确呈现,但您需要了解如何登录。他们有一个Android应用程序示例,但看起来API都是本地代码
while循环结束后,您错过了fileOutputStream.close()
。您是否有权限写入SDCardRoot
?在关闭流之前,我还将flush()
流。@Blackbelt我有权限写入,是的。没有更改。在实现了建议的两行代码后仍然是一样的。您尝试过mega之外的代码吗?不兼容的类型boolean和int
就是这里出现的。
while ((bufferLength = inputStream.read(buffer)) != null) {