【问题标题】:Checking if image file exists on Server (Android)检查服务器上是否存在图像文件(Android)
【发布时间】:2014-06-27 19:12:37
【问题描述】:
我的服务器上有一个包含图像的文件目录。图像的名称与项目表相关联。物品 ID#1,会有对应的图片“1.png”。
并非所有项目都有图像,因此如果应用程序检查,它不会在其中一些项目上找到任何内容。在这种情况下,我想要一个 if 检查以显示默认图像。
我的问题:只有URL 可用,我如何检查网址是否指向图像或者它是否导致空/空白/空?
【问题讨论】:
标签:
java
android
file
url
【解决方案1】:
我会建议请求图像请求的负责人,因为它更快。
非毕加索:
HttpClient client= new DefaultHttpClient();
HttpHead headMethod = new HttpHead(urlToImage);
HttpResponse response = client.execute(headMethod);
if(response.getStatusLine().getStatusCode== HttpStatus.SC_NOT_FOUND) {
// Image does not exist, show a placeholder or something
} else {
// load image into the view.
}
Picasso :(与 head 版本无关,但这是处理它的简单替代方案,还请查看 Picasso 可以接受的回调以微调成功/错误)
Picasso.with(context).load(urlToImage).into(imageView).placeholder(R.drawable.user_placeholder).error(R.drawable.user_placeholder_error);
参考资料:
Apache HttpHead from Android's SDK Reference
Apache HttpStatus from Android's SDK Reference
Square Picasso
【解决方案2】:
假设您正在讨论一个尝试通过 HTTP / HTTPS 获取图像的场景......
简单的方法是尝试获取图像。然后检查响应以查看响应状态代码是什么以及内容类型是什么。如果它们分别为 200 和“image/png”,那么你就有了图像。如果状态码是 404,那么图像不存在。如果两者都不是,那么可以合理地假设服务器端“出现问题”。
链接的问题有做这种事情的代码。
问题在于,当您尝试获取不存在的图像时,您在某种程度上依赖于服务器的操作。它可能是合理的:
- 替换自己的默认图像
- 返回错误页面,无论是否设置 404 状态代码
- 将您重定向到错误页面,这意味着状态代码将为 3xx,
- 失败,导致 5xx 响应,甚至
- 似乎成功,但返回一个空正文,或实际内容与响应“content-type”标头不匹配的正文。
如果您实现了服务器,或者您直接与实现者打交道,您可以假设它会做什么。但是,如果您的代码必须针对任何服务器工作,那么它需要更复杂......并且更具防御性。