springboot(44) : 网络图片url转发

文章描述了一个使用SpringMVC框架创建的RESTfulAPI控制器,处理GET请求下载文件,同时涉及Base64编码功能,包括从URL直接下载和处理Base64编码的URL请求解码。

import com.alibaba.gts.flm.common.utils.Base64Util;
import com.alibaba.gts.flm.dd.api.web.controller.model.UrlReq;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

@RestController
@RequestMapping("/file")
public class FileController {

    @Value("${local.ip:-}")
    private String localIp;

    @RequestMapping("/getByUrl")
    public void getByUrl(String urls, HttpServletResponse response) throws Exception {
        URL url = new URL(urls);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");

        InputStream inputStream = connection.getInputStream();
        BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

        byte[] buffer = new byte[1024];
        int bytesRead;
        while ((bytesRead = bufferedInputStream.read(buffer)) != -1) {
            outputStream.write(buffer, 0, bytesRead);
        }
        byte[] imageBytes = outputStream.toByteArray();
        response.setContentType("image/jpeg"); // 根据实际需要设置响应的内容类型
        response.getOutputStream().write(imageBytes);
        bufferedInputStream.close();
        outputStream.close();
    }


    @RequestMapping("/getByUrl2")
    public void getByUrl2(String urls, HttpServletResponse response) throws Exception {
        String str = Base64Util.base64Restore(urls);
        if (!str.contains("http")){
            str = "http://"+localIp+":32033"+str;
        }
        URL url = new URL(str);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");

        InputStream inputStream = connection.getInputStream();
        BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

        byte[] buffer = new byte[1024];
        int bytesRead;
        while ((bytesRead = bufferedInputStream.read(buffer)) != -1) {
            outputStream.write(buffer, 0, bytesRead);
        }
        byte[] imageBytes = outputStream.toByteArray();
        response.setContentType("image/jpeg"); // 根据实际需要设置响应的内容类型
        response.getOutputStream().write(imageBytes);
        bufferedInputStream.close();
        outputStream.close();
    }

    @RequestMapping("/getByUrl3")
    public void getByUrl3(@RequestBody UrlReq req, HttpServletResponse response) throws Exception {
        URL url = new URL(req.getUrl());
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");

        InputStream inputStream = connection.getInputStream();
        BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

        byte[] buffer = new byte[1024];
        int bytesRead;
        while ((bytesRead = bufferedInputStream.read(buffer)) != -1) {
            outputStream.write(buffer, 0, bytesRead);
        }
        byte[] imageBytes = outputStream.toByteArray();
        response.setContentType("image/jpeg"); // 根据实际需要设置响应的内容类型
        response.getOutputStream().write(imageBytes);
        bufferedInputStream.close();
        outputStream.close();
    }
}
Base64Util
import java.util.Base64;

public class Base64Util {

    public static String base64Restore(String str) {
        byte[] decodedBytes = Base64.getDecoder().decode(str);
        return new String(decodedBytes);
    }

    public static String str2Base64(String str) {
        return Base64.getEncoder().encodeToString(str.getBytes());
    }
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值