33.批量通过GET链接下载图片到指定文件夹下

通过JAVA循环调用照片下载链接

java 复制代码
package cn.com.goldwind.ercp.fems.controller.common;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Arrays;
import java.util.List;

/**
 * 批量下载附件
 * 图片名称为fileKey
 */
public class SimpleImageDownloader {
    // 配置超时时间(毫秒)
    private static final int CONNECT_TIMEOUT = 5000;
    private static final int READ_TIMEOUT = 10000;

    public static void main(String[] args) {
        // 1. 定义要下载的图片URL列表
        List<String> imageUrls = Arrays.asList(
                  "https://baidu.com/fems/file/download/aad4803c8cb1479e98215cbc1def9d24"
                 ,"https://baidu.com/fems/file/download/2c25033166684effa09bb20ac71b38f5"
        );

        String saveDir = "E:/downloaded_images"; // 保存目录

        // 2. 循环执行下载
        for (int i = 0; i < imageUrls.size(); i++) {
            String urlStr = imageUrls.get(i);
            try {
                System.out.println("正在下载第 " + (i + 1) + "/" + imageUrls.size() + " 张: " + urlStr);
                downloadFile(urlStr, saveDir);
                System.out.println("成功: " + urlStr);
            } catch (Exception e) {
                System.err.println("失败: " + urlStr + " - 错误信息: " + e.getMessage());
            }
        }
        System.out.println("所有任务处理完毕。");
    }

    /**
     * 下载单个文件
     */
    public static void downloadFile(String fileUrl, String saveDir) throws IOException {
        URL url = new URL(fileUrl);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();

        // 设置请求属性
        connection.setRequestMethod("GET");
        connection.setConnectTimeout(CONNECT_TIMEOUT);
        connection.setReadTimeout(READ_TIMEOUT);
        // 模拟浏览器User-Agent,防止被某些服务器拦截
        connection.setRequestProperty("User-Agent", "Mozilla/5.0");

        // 检查响应码
        int responseCode = connection.getResponseCode();
        if (responseCode != HttpURLConnection.HTTP_OK) {
            throw new IOException("HTTP错误码: " + responseCode);
        }

        // 获取输入流
        InputStream inputStream = connection.getInputStream();

        // 生成文件名:从URL最后部分截取,如果无法获取则用时间戳
        String fileName = getFileNameFromUrl(fileUrl);
        File dir = new File(saveDir);
        if (!dir.exists()) {
            dir.mkdirs();
        }
        File outputFile = new File(dir, fileName);

        // 写入文件
        try (FileOutputStream outputStream = new FileOutputStream(outputFile)) {
            byte[] buffer = new byte[2048];
            int bytesRead;
            while ((bytesRead = inputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, bytesRead);
            }
        } finally {
            inputStream.close();
            connection.disconnect();
        }
    }

    /**
     * 从URL中提取文件名
     */
    private static String getFileNameFromUrl(String urlStr) {
        String[] parts = urlStr.split("/");
        String fileName = parts[parts.length - 1];
        // 如果文件名不包含扩展名或为空,给予默认名
//        if (fileName.isEmpty() || !fileName.contains(".")) {
//            fileName = "image_" + System.currentTimeMillis() + ".jpg";
//        }
        fileName += ".jpg";
        return fileName;
    }
}
相关推荐
SimonKing26 分钟前
震惊:怎么回事,opencode一轮对话耗尽免费额度
java·后端·程序员
装不满的克莱因瓶30 分钟前
【SpringAI Alibaba】ReactAgent响应SSE实时流式传输案例实战
java·人工智能·ai·sse·springai
杨凯凡33 分钟前
Spring Boot 文件上传怎么做才安全?流式落盘、路径校验与数据库一致性实战
java·spring boot·文件上传·后端安全·数据库一致性
这个昵称不容易1 小时前
旅游管理系统的设计与实现(SpringBoot + MySQL + Vue 前后端分离)
java·springboot·毕设
Rain的Java大神之路1 小时前
LeetCode 37 解数独面试攻略:回溯 + 位掩码 + MRV,从暴力到毫秒级求解
java·后端·leetcode
天天被压力2 小时前
【A股分钟级高频数据完全手册 #11】券商实时行情数据接口:实时交易(券商源)接入与字段
java·人工智能·python
天天被压力2 小时前
【A股分钟级高频数据完全手册 #12】股票五档盘口数据接口:买卖五档实时盘口解析
java·人工智能·python
Wang's Blog11 小时前
Java 项目实战: 交友项目 - FastDFS:入门案例
java·开发语言·交友
apcipot_rain12 小时前
C++转Java日记(03)
java·开发语言·c++
皮皮林55112 小时前
Java实现微信扫码登录
java