长沙专业做网站腾讯会议开始收费
【需求】A和B两台服务器,A是云服务器,B是本地服务器,A和B上部署了一模一样的springboot代码,代码分为前后端,其中在B上前端请求先请求B的后端然后B转发到A的后端,然后A返回给B,B再返回给B的前端,其中有这样一个要求,当A中返回的有图片地址, eg:https://img2.baidu.com/it/u=3291591322,3298476114&fm=253&app=120&size=w931&n=0&f=JPEG&fmt=auto?sec=1741712400&t=0eb7f02bddaf552d7ae9f89d94f31f6e,B需要把这个图片download下来,然后放到D:\file路径下 然后返回可以访问的url 入参是待下载的图片地址(https://img2.baidu.com/it/u=3291591322,3298476114&fm=253&app=120&size=w931&n=0&f=JPEG&fmt=auto?sec=1741712400&t=0eb7f02bddaf552d7ae9f89d94f31f6e) 返回是本地下载后的图片预览地址
代码如下:
1.首先写一个工具类
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.nio.file.Paths;
import java.util.UUID;public class ImageDownloadUtils {// 本地存储根目录(按需求修改)private static final String LOCAL_BASE_PATH = "D:\\file\\";// B服务器访问前缀(根据实际IP/域名和端口配置)private static final String SERVER_URL_PREFIX = "http://ip:7075/"; /*** 下载远程图片并返回本地可访问URL* @param imageUrl 待下载的图片地址* @return 本地预览地址*/public static String downloadAndGetLocalUrl(String imageUrl) {try {// 1. 创建存储目录File saveDir = new File(LOCAL_BASE_PATH);if (!saveDir.exists()) saveDir.mkdirs();// 2. 生成唯一文件名(避免重复)String fileExt = getFileExtension(imageUrl);String fileName = UUID.randomUUID() + "." + fileExt;// 3. 下载文件String localPath = LOCAL_BASE_PATH + fileName;downloadImage(imageUrl, localPath);// 4. 返回可访问URLreturn SERVER_URL_PREFIX + fileName;} catch (Exception e) {throw new RuntimeException("图片下载失败: " + e.getMessage(), e);}}/*** 从URL获取文件扩展名*/private static String getFileExtension(String url) {try {String path = new URL(url).getPath();int dotIndex = path.lastIndexOf('.');return (dotIndex == -1) ? "png" : path.substring(dotIndex + 1);} catch (Exception e) {return "png"; // 默认png格式}}/*** 下载图片到本地*/private static void downloadImage(String imageUrl, String savePath) throws IOException {URL url = new URL(imageUrl);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setConnectTimeout(5000);conn.setReadTimeout(30000);try (InputStream is = conn.getInputStream();FileOutputStream fos = new FileOutputStream(savePath)) {byte[] buffer = new byte;int len;while ((len = is.read(buffer)) != -1) {fos.write(buffer, 0, len);}} finally {conn.disconnect();}}
}
2.自己在电脑上装一个nginx,路径指定到D:\file,
返回地址:http://ip:7075/图片名称
nginx配置如下:
server{listen 7075;server_name 域名 ip;location / {root D:\file;}}
3.demo
public static void main(String[] args) {String originUrl = "https://img2.baidu.com/it/u=3291591322,3298476114&fm=253&app=120&size=w931&n=0&f=JPEG&fmt=auto?sec=1741712400&t=0eb7f02bddaf552d7ae9f89d94f31f6e";String localUrl = ImageDownloadUtils.downloadAndGetLocalUrl(originUrl);System.out.println("localUrl = " + localUrl);}