无法打开通过urlconnection但httpclients下载的图像

时间:2019-05-10 06:32:44

标签: inputstream httpurlconnection apache-httpclient-4.x urlconnection

我可以打开1.jpg
但无法打开2.jpg

public static void main(String[] args) throws Exception{     

download(“ https://maint1.deeptel.com.cn/upload/M00/00/5B/ty_yLFyiuKqACaoNAAIRXTRqncE301.jpg”,“ 1.jpg”);         download2(“ https://maint1.deeptel.com.cn/upload/M00/00/5B/ty_yLFyiuKqACaoNAAIRXTRqncE301.jpg”,“ 2.jpg”);

}


public static void download(String urlString, String filename) throws Exception {
    URL url = null;
    OutputStream os = null;
    URLConnection con = null;
    InputStream is = null;
    try {
        url = new URL(urlString);
        con = url.openConnection();
        con.setConnectTimeout(5 * 1000);
        is = con.getInputStream();
        byte[] bs = new byte[1024];
        int len;

        os = new FileOutputStream(filename);
        while ((len = is.read(bs)) != -1) {
            os.write(bs, 0, len);
        }
    } catch (IOException e1) {
        e1.printStackTrace();
    } finally {
        try {
            if (os != null)
                os.close();
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        try {
            if (is != null)
                is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}


public static void download2(String url, String fileName) throws Exception {
    CloseableHttpClient httpClient = null;
    InputStream inputStream = null;
    File file = null;
    try {
        httpClient = HttpClients.createDefault();
        HttpGet method = new HttpGet(url);
        HttpResponse result = httpClient.execute(method);
        inputStream = result.getEntity().getContent();
        BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
        //得到图片的二进制数据,以二进制封装得到数据,具有通用性
        byte[] data = readInputStream(bufferedInputStream);
        //new一个文件对象用来保存图片,默认保存当前工程根目录
        File imageFile = new File(fileName);
        //创建输出流
        FileOutputStream outStream = new FileOutputStream(imageFile);
        //写入数据
        outStream.write(data);
        //关闭输出流
        outStream.close();
    } catch (IOException e) {
    } finally {
        try {
            inputStream.close();
        } catch (IOException e) {

        }
        try {
            httpClient.close();
        } catch (IOException e) {

        }
    }
}

public static byte[] readInputStream(InputStream inStream) throws Exception {
    ByteArrayOutputStream outStream = new ByteArrayOutputStream();
    //创建一个Buffer字符串
    byte[] buffer = new byte[1024];
    //每次读取的字符串长度,如果为-1,代表全部读取完毕
    int len = 0;
    //使用一个输入流从buffer里把数据读取出来
    while ((len = inStream.read(buffer)) != -1) {
        //用输出流往buffer里写入数据,中间参数代表从哪个位置开始读,len代表读取的长度
        outStream.write(buffer, 0, len);
    }
    //关闭输入流
    inStream.close();
    //把outStream里的数据写入内存
    return outStream.toByteArray();
}

0 个答案:

没有答案