我正在尝试从服务器下载PPT文件。 它在字节中。
但是在调试时我注意到输入流在运行时抛出了FileNotFound的异常..文件确实存在于服务器上,这是我的代码,非常感谢任何帮助。
public class DownloadFileAsync extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... aurl) {
int count;
try {
URL url = new URL(aurl[0]);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.addRequestProperty("Authorization", "Basic " + SharedPref.getAuthPrefValue());
connection.addRequestProperty("Device", BaseApplication.getCurrentDevice().getDevice().toString());
connection.addRequestProperty("DeviceId", BaseApplication.getCurrentDevice().getDeviceId());
connection.connect();
int lengthOfFile = connection.getContentLength();
Log.d("ANDRO_ASYNC", "Length of file: " + lengthOfFile);
InputStream input = new BufferedInputStream(url.openStream());
File sdcardDest = new File(Environment.getExternalStorageDirectory(), "Availo");
String finalDest = sdcardDest + File.separator + "Check1" + "." + "PPT";
OutputStream output = new FileOutputStream(finalDest);
byte data[] = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
total += count;
publishProgress(""+(int)((total*100)/lengthOfFile));
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
我在Mac上使用Charles(类似于Windows上的小提琴手。)来查看我从服务器发送和接收的内容, 服务器不会返回任何错误,但它显示下载步骤为6-7秒,下载大约400字节然后停止。
从输入流行抛出异常。
谢谢!
答案 0 :(得分:1)
我建议您查看DownloadManager
系统服务。它专为您要做的事情而设计:
(来自文档)
下载管理器是一个处理长时间运行的系统服务 HTTP下载。客户端可以请求将URI下载到a 特定目标文件。下载管理器将执行 在后台下载,负责HTTP交互和 在故障或连接更改后重试下载 系统重新启动
答案 1 :(得分:0)
虽然我同意Muzikant有关下载管理器的信息,但是 {... 1}}通常在本地设备上找不到文件时抛出...
您需要执行以下操作以确保它不会发生
FileNotFoundException