如何解决ResponseCode 400 用于从网址下载图片
这是我为从 url 下载图像而编写的代码,但使用 java.io.FilenotFoundException 接收响应代码 400
@Override
protected Void doInBackground(String... strings) {
try {
URL url = new URL(strings[0]);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestProperty("User-Agent","Mozilla/5.0
(Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2)
Gecko/20100316 Firefox/3.6.2");
con.setRequestMethod("GET");
con.setDoOutput(true);
con.connect();
File file = Environment.getExternalStorageDirectory();
File f1 = new File(file,"_Url download");
if(!f1.exists()){
f1.mkdir();
}
fileName = System.currentTimeMillis() + ".jpg";
File f2 = new File(f1,fileName);
f2.createNewFile();
InputStream er = con.getErrorStream();
Log.i("ErrorCode",con.getResponseCode()+"");
Log.i("ErrorMessage",con.getResponseMessage());
Log.i("ErrorStream",er+"");
InputStream in = con.getInputStream();
FileOutputStream out = new FileOutputStream(f2);
byte[] buffer = new byte[1024];
int len;
System.out.println(Arrays.toString(buffer));
while((len = in.read(buffer,1024)) > 0) {
out.write(buffer,len);
}
out.close();
in.close();
} catch (MalformedURLException e) {
e.printstacktrace();
} catch (ProtocolException e) {
e.printstacktrace();
} catch (IOException e) {
Log.i("IOException",e.toString());
}
return null;
}
日志
2021-06-26 09:26:25.532 26760-26890/com.example.urldownload I/ErrorCode: 400
2021-06-26 09:26:25.533 26760-26890/com.example.urldownload I/ErrorMessage: Bad Request
2021-06-26 09:26:25.533 26760-26890/com.example.urldownload I/Errorstream: buffer(com.android.okhttp.internal.http.Http1xStream$FixedLengthSource@fbb2c70).inputStream()
2021-06-26 09:26:25.534 26760-26890/com.example.urldownload I/IOException: java.io.FileNotFoundException: https://instagram.fidr1-1.fna.fbcdn.net/v/t51.2885-15/e35/190664842_184685183538740_5039921250568173600_n.jpg?tp=1&_nc_ht=instagram.fidr1-1.fna.fbcdn.net&_nc_cat=108&_nc_ohc=RrEU4lTwYCwAX-vgVQ4&edm=AABBvjUBAAAA&ccb=7-4&oh=3ac34be54793fa59134380fd9e0bd617&oe=60DCB7E6&_nc_sid=83d603
清单
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
保存图像的文件的图像
For more details look at this image
解决方法
使用 picasso 将图像保存在外部存储中,您可以执行以下操作
private Target mTarget = new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap,Picasso.LoadedFrom from) {
// Perform simple file operation to store this bitmap
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
}
...
Picasso.with(this).load("url").into(mTarget);
这里的“Target”是毕加索提供的一个类,它的理解方法非常简单…… 这是一个简单的方法
,由于缺少提供的代码,很难找出可能导致错误的原因。我最好的猜测是使用 DownloadManager 而不是 AsyncTask。
下载管理器是一种处理长时间运行的 HTTP 下载的系统服务。客户端可能会请求将 URI 下载到特定目标文件。下载管理器将在后台进行下载,处理 HTTP 交互并在失败或连接更改和系统重新启动后重试下载。 (https://developer.android.com/reference)
,我错了。 谢谢大家分享你的想法
con.setDoOutput(true);是一个POST方法 它不获取任何数据
con.setDoOutput(true);不应使用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。