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

2020-11-28 00:00:00 服务器 图片 图片上传

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;
    }
}

实现效果如下
《Java通过图片URL把图片上传到本地服务器》
《Java通过图片URL把图片上传到本地服务器》

    原文作者:Jon Young
    原文地址: https://blog.csdn.net/weixin_50989469/article/details/114643535
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。

相关文章