我尝试使用以下方式下载二进制文件:
URL url = new URL(urlStr);
HttpURLConnection ucon = (HttpURLConnection) url.openConnection();
ucon.connect();
InputStream is = new BufferedInputStream(ucon.getInputStream());
通过移动数据运行时(在Samsung Galaxy 4,Android 5.0.1上),我收到以下回复
j���UFEHLER��6ERROR��`Заявеното съдържание не може да бъде заредено ��&Wrong MIME-Type���Fback��2
这意味着"请求的内容无法加载"保加利亚语(我从保加利亚下载的服务器)。但更多信息似乎" 错误的MIME类型"在回复结束时。
我使用HttpGet
尝试相同但没有结果。
奇怪的是,当我通过Wifi执行相同的请求时一切正常。
此外,我可以从浏览器下载移动数据上的文件,但不能下载代码。此外,我还通过移动数据在联想上使用Android 4.4.2进行了测试,并且还可以使用。
我注意到,当通过移动数据连接时,我获得了Content-Type: application/vnd.wap.wmlc
(已记录ucon.getResponseCode()
),并且在通过WiFi时没有设置为内容类型。
有什么想法吗? :/
答案 0 :(得分:0)
这是我的文件下载工作代码。您可以查看是否遗漏了某些内容。
public class ImageDownloaderAsyncTask extends
AsyncTask<Void, Integer, Integer> {
private static File f;
protected void doInBackground() throws IOException {
File dir = new File(Constants.FILE_PATH);
if (!dir.exists()) dir.mkdir();
f = new File(Constants.FILE_PATH + Constants.FILE_NAME);
if (f != null && !f.exists()) {
f.createNewFile();
}
try {
URL url = new URL(fileUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
String data1 = f.getPath();
FileOutputStream stream = new FileOutputStream(data1);
byte data[] = new byte[4096];
int count;
while ((count = input.read(data)) != -1) {
// allow canceling with back button
if (isCancelled()) {
input.close();
}
stream.write(data, 0, count);
}
stream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected Integer doInBackground(Void... params) {
try {
doInBackground();
} catch (IOException e) {
e.printStackTrace();
}
return 1;
}
protected void onPostExecute(Integer result) {}
}