Java通过图片URL把图片上传到本地服务器

Java通过图片URL把图片上传到本地服务器

在工作中通常有这么个需求:跟第三方对接数据,第三方给的图片数据只有一个url链接,这就导致我们访问图片资源要一直请求第三方的资源。万一第三方做了限制或者删除,就导致我们这边的图片资源访问不到了。这就需要我们把第三方的图片url实时转存到我们的服务器上,真正的实现资源自由

其实实现逻辑很简单:
①首先通过URL从HTTP响应获取资源
②然后把资源转成文件流
③最后以文件流的形式上传图片到服务器

话不多所,直接上Springboot代码👇👇👇

@RestController
@RequestMapping("/upload")
public class TestController {

    @GetMapping("/testUpload")
    public String testUpload(){
        try {
            //网络图片资源的url(可以把这个放参数中动态获取)
            String picUrl = "http://img1.gtimg.com/chinanba/pics/hv1/220/29/2326/151255765.jpg";
            //获取原文件名
            String fileName = picUrl.substring(picUrl.lastIndexOf("/")+1);
            //创建URL对象,参数传递一个String类型的URL解析地址
            URL url = new URL(picUrl);
            HttpURLConnection huc = (HttpURLConnection) url.openConnection();
            //从HTTP响应消息获取状态码
            int code = huc.getResponseCode();
            if (code == 200) {
                //获取输入流
                InputStream ips = huc.getInputStream();
                byte[] buffer = new byte[1024];
                int len = 0;
                ByteArrayOutputStream bos = new ByteArrayOutputStream();
                while ((len = ips.read(buffer)) != -1) {
                    bos.write(buffer, 0, len);
                }
                bos.close();
                return uploadFileByBytes(bos.toByteArray(),fileName);
            }
            return "";
        } catch (Exception e) {
            return "";
        }
    }

    private String uploadFileByBytes(byte[] bytes, String fileName) throws Exception {
        for (int i = 0; i < bytes.length; i++) {
            if (bytes[i] < 0) {
                bytes[i] += 256;
            }
        }
        String realPath = System.getProperty("user.dir") + File.separator + "upload" + File.separator;
        //文件路径
        String url = realPath + fileName;
        //判断文件路径是否存在,如果没有则新建文件夹
        File files = new File(realPath);
        if(!files.exists()){
            files.mkdirs();
        }
        //把文件写入到指定路径下
        try(OutputStream out = new BufferedOutputStream(new FileOutputStream(url, false))){
            out.write(bytes);
        }
        return url;
    }
}

实现效果如下👇👇👇
请求访问
实现效果

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值