SpringBoot整合zimg图片服务器
依赖
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.75</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpmime</artifactId> </dependency>
也有
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>
yml配置
zimg:
server: http://192.168.80.135:4869
ZimgConfig.java
import lombok.Data; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; @Data @Configuration public class ZimgConfig { @Value("${zimg.server}") private String zimgServer; }
ZimgUtils.java
import com.example.zimg.config.ZimgConfig; import lombok.extern.slf4j.Slf4j; import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.utils.URIBuilder; import org.apache.http.entity.ByteArrayEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; import javax.annotation.PostConstruct; /** * zimg工具类 * */ @Component @Slf4j public class ZimgUtils { @Autowired private ZimgConfig zimgConfig; public static ZimgUtils zimgUtils; /** * 初始化minio配置 */ @PostConstruct public void init() { zimgUtils = this; zimgUtils.zimgConfig = this.zimgConfig; } private static final String uploadPath = "/upload"; private static final String deletePath = "/admin"; /** * 成功返回: * { * "ret": true, * "info": { * "md5": "a48998d3095079c71d1c72054b847dcf", * "size": 110823 * } * } * <p> * 失败返回: * { * "ret": false, * "error": { * "code": 5, * "message": "Content-Length error." * } * } * * @param multipartFile * @return * @throws Exception */ public String uploadImage(MultipartFile multipartFile) throws Exception { String url = zimgConfig.getZimgServer() + uploadPath; String fileName = multipartFile.getOriginalFilename(); String ext = fileName.substring(fileName.lastIndexOf(".") + 1); //创建post请求对象 HttpPost post = new HttpPost(url); //文件类型 post.addHeader("Content-Type", ext.toLowerCase()); ByteArrayEntity byteArrayEntity = null; byteArrayEntity = new ByteArrayEntity(multipartFile.getBytes()); post.setEntity(byteArrayEntity); CloseableHttpClient client = HttpClients.createDefault(); //启动执行请求,并获得返回值 CloseableHttpResponse response = client.execute(post); //得到返回的entity对象 HttpEntity entity = response.getEntity(); //把实体对象转换为string String result = EntityUtils.toString(entity, "UTF-8"); return result; } /** * 需要zimg的配置开启权限 * 修改配置文件 zimg.lua 修改 admin_rule='allow 127.0.0.1' =》 admin_rule='allow all' */ public void deleteImage(String md5) throws Exception { String url = zimgConfig.getZimgServer() + deletePath; //创建URLBuilder URIBuilder uriBuilder = new URIBuilder(url); //设置参数 uriBuilder.setParameter("md5", md5); uriBuilder.setParameter("t", "1"); HttpGet httpGet = new HttpGet(uriBuilder.build()); CloseableHttpClient client = HttpClients.createDefault(); //启动执行请求,并获得返回值 CloseableHttpResponse response = client.execute(httpGet); //得到返回的entity对象 HttpEntity entity = response.getEntity(); //把实体对象转换为string 这返回的html页面代码,,没找到json方式 String result = EntityUtils.toString(entity, "UTF-8"); log.info(result); } }
使用
import com.alibaba.fastjson.JSONObject; import com.example.zimg.utils.ZimgUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; /** * demo控制器 */ @RestController @Slf4j public class ZimgController { @Autowired private ZimgUtils zimgUtils; /** * 上传附件 * @param file * @return */ @PostMapping(value = "/upload") public void uploadImage(MultipartFile file) { try { if (file.isEmpty()) { log.error(">>>>>>>>>>>>>>文件为空"); return; } String s = zimgUtils.uploadImage(file); JSONObject object = JSONObject.parseObject(s); if (object.getBoolean("ret")){ //成功 JSONObject info = object.getJSONObject("info"); log.info(">>>>>>>>> 文件md5:{},文件大小:{}",info.get("md5"),info.get("size")); }else { //失败 JSONObject error = object.getJSONObject("error"); log.error(">>>>>>>> 文件上传失败:{}",error.get("message")); } } catch (Exception e) { e.printStackTrace(); } } /** * 删除文件 * @param md5 上传成功后返回的md5 * @return */ @DeleteMapping(value = "/delete") public void deleteImage(String md5) { try { zimgUtils.deleteImage(md5); } catch (Exception e) { e.printStackTrace(); } } }
-----------------------有任何问题可以在评论区评论,也可以私信我,我看到的话会进行回复,欢迎大家指教------------------------
(蓝奏云官网有些地址失效了,需要把请求地址lanzous改成lanzoux才可以)