IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 下载图片 getInputStream、available()问题 -> 正文阅读

[移动开发]下载图片 getInputStream、available()问题

作者:treeSkill

需求:用户请求URL,根据请求内容加载网络图片并显示到用户端。

涉及步骤:
1、根据URL下载图片

2、将图片写出到客户端查看

问题:图片加载失败或出现残缺问题

原因:inputStream.available()读数异常,在本地加载图片时available方法一般没有问题,但是加载URL图片地址时,因为通讯过程中,字节不是一次性传输而是分批次传输的,直接导致在获取长度时图片的大小不一致,造成文件长度错误缺失数据。获取文字长度建议使用:

connection.getContentLength()  以协议头约定的字节长度为准

附功能代码:

/**
 * 获取http图片流
 * @author LengChen
 * @version 1.0
 * @date 2022-03-10
 */
public class HttpUtils {

    /**
     *
     * @description: 从服务器获得一个输入流(本例是指从服务器获得一个image输入流)
     * @author: LengChen
     * @date: 2022年03月10日
     * @return
     */
    public static Map<String, Object> getInputStream(String urlPath) {
        try {
            Map<String, Object> map = new HashMap<String, Object>();
            HttpURLConnection connection = (HttpURLConnection) new URL(urlPath).openConnection();
            connection.setReadTimeout(5000);
            connection.setConnectTimeout(5000);
            connection.setRequestMethod("GET");
            if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
                InputStream inputStream = connection.getInputStream();
                System.out.println(inputStream.available());
                System.out.println();
                map.put("inputStream",inputStream);
                map.put("length",connection.getContentLength());
                return map;
            }
        } catch (IOException e) {
            System.out.println("获取网络图片出现异常,图片路径为:" + urlPath);
            e.printStackTrace();
        }
        return null;
    }

    /**
     *
     * @description: 将输入流输出到页面
     * @author: LengChen
     * @date: 2022年03月10日
     * @param resp
     * @param inputStream
     */
    public static void writeFile(HttpServletResponse resp, InputStream inputStream) {
        OutputStream out = null;
        try {
            out = resp.getOutputStream();
            int len = 0;
            byte[] b = new byte[1024];
            while ((len = inputStream.read(b)) != -1) {
                out.write(b, 0, len);
            }
            out.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (out != null) {
                    out.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

}
@GetMapping("/downImg/{fileId}")
    public void downloadNet(@PathVariable("fileId") String fileId,HttpServletResponse response) throws IOException {
        // 服务器图片url
        String urlPath = "http://XXXXX";
        // 从服务器端获得图片,并输出到页面
        Map<String,Object> map = HttpUtils.getInputStream(urlPath);
        response.setContentType("image/jpeg");
        InputStream inputStream = (InputStream) map.get("inputStream");
        response.setContentLength((Integer) map.get("length"));
        HttpUtils.writeFile(response, inputStream);
    }

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-03-12 17:41:04  更:2022-03-12 17:42:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 19:11:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码