点击查看代码
package org.example;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.PutObjectRequest;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
public class ImageUploader {
// 阿里云OSS配置
private static final String ENDPOINT = "ENDPOINT";
private static final String ACCESS_KEY_ID = "ACCESS_KEY_ID";
private static final String ACCESS_KEY_SECRET = "ACCESS_KEY_SECRET";
private static final String BUCKET_NAME = "BUCKET_NAME";
private static final String OSS_DOMAIN = "https://" + BUCKET_NAME + "." + ENDPOINT;
private static final String CDN_DOMAIN = "CDN_DOMAIN";
public static void main(String[] args) {
// 本地文件夹路径(包含多个子文件夹)
String localRootPath = "本地文件夹路径";
// 云服务器上的根目录
String ossRootPath = "images/";
// 初始化OSS客户端
OSS ossClient = new OSSClientBuilder().build(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET);
try {
// 遍历本地根目录下的所有子文件夹
Files.list(Paths.get(localRootPath))
.filter(Files::isDirectory)
.forEach(folder -> processFolder(ossClient, folder, ossRootPath));
System.out.println(" 所有图片上传完成!");
} catch (IOException e) {
e.printStackTrace();
} finally {
// 关闭OSS客户端
ossClient.shutdown();
}
}
private static void processFolder(OSS ossClient, Path folderPath, String ossRootPath) {
String folderName = folderPath.getFileName().toString();
List<String> imageUrls = new ArrayList<>();
try {
// 1. 上传文件夹中的所有图片
Files.list(folderPath)
.filter(file -> isImageFile(file.toString()))
.forEach(imageFile -> {
String objectName = ossRootPath + folderName + "/" + imageFile.getFileName().toString();
String imageUrl = uploadFileToOSS(ossClient, imageFile.toFile(), objectName);
if (imageUrl != null) {
imageUrls.add(imageUrl);
}
});
// 2. 创建包含图片URL的txt文件
if (!imageUrls.isEmpty()) {
createUrlTxtFile(folderPath, imageUrls);
}
} catch (IOException e) {
e.printStackTrace();
}
}
private static String uploadFileToOSS(OSS ossClient, File file, String objectName) {
try {
// 上传文件到OSS
ossClient.putObject(new PutObjectRequest(BUCKET_NAME, objectName, file));
// 返回文件的访问URL
return OSS_DOMAIN + "/" + objectName;
} catch (Exception e) {
System.err.println(" 上传文件失败: " + file.getName());
e.printStackTrace();
return null;
}
}
private static void createUrlTxtFile(Path folderPath, List<String> urls) {
File txtFile = new File(folderPath.toString(), "image_urls.txt");
try (FileWriter writer = new FileWriter(txtFile)) {
for (String url : urls) {
// 替换域名
String cdnUrl = url.replace(OSS_DOMAIN, CDN_DOMAIN);
writer.write(cdnUrl + System.lineSeparator());
}
System.out.println(" 已创建URL文件: " + txtFile.getAbsolutePath());
} catch (IOException e) {
System.err.println(" 创建URL文件失败: " + txtFile.getName());
e.printStackTrace();
}
}
private static boolean isImageFile(String fileName) {
String[] imageExtensions = {".jpg", ".jpeg", ".png", ".gif", ".bmp"};
fileName = fileName.toLowerCase();
for (String ext : imageExtensions) {
if (fileName.endsWith(ext)) {
return true;
}
}
return false;
}
}
-------------------我是一条可爱的分割线---------------
以下是效果图展示:
![]()