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;
}
}
实现效果如下
原文作者:Jon Young
原文地址: https://blog.csdn.net/weixin_50989469/article/details/114643535
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/weixin_50989469/article/details/114643535
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
相关文章