通用工具类
阿里云oss
需求:防止文件覆盖 (文件名唯一借用uuid)
阿里云服务器
Accesskay
将不变量提出方法做不变属性。
可以变化的量定义为参数。
上传文件工具类
(utils)包内定义
import com.aliyun.oss.ClientException; import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.OSSException; import java.io.InputStream; //上传文件工具类会用 public class AliOssUtil { //变量需要修改用自己的 private static final String ENDPOINT = "https://oss-cn-shenzhen.aliyuncs.com"; //放在系统中防止泄露 public static final String ACCESS_KEY_ID = System.getenv("ALIYUN_ACCESSKEY_ID"); private static final String SECRET_ACCESS_KEY = System.getenv("ALIYUN_ACCESSKEY_SECRET"); private static final String BUCKET_NAME = "news-event"; //上传文件,返回文件的公网访问地址 public static String uploadFile(String objectName, InputStream inputStream) { // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(ENDPOINT, ACCESS_KEY_ID, SECRET_ACCESS_KEY); //公文访问地址 String url = ""; try { // 创建存储空间。 ossClient.createBucket(BUCKET_NAME); ossClient.putObject(BUCKET_NAME, objectName, inputStream); url = "https://" + BUCKET_NAME + "." + ENDPOINT.substring(ENDPOINT.lastIndexOf("/") + 1) + "/" + objectName; } catch (OSSException oe) { System.out.println("Caught an OSSException, which means your request made it to OSS, " + "but was rejected with an error response for some reason."); System.out.println("Error Message:" + oe.getErrorMessage()); System.out.println("Error Code:" + oe.getErrorCode()); System.out.println("Request ID:" + oe.getRequestId()); System.out.println("Host ID:" + oe.getHostId()); } catch (ClientException ce) { System.out.println("Caught an ClientException, which means the client encountered " + "a serious internal problem while trying to communicate with OSS, " + "such as not being able to access the network."); System.out.println("Error Message:" + ce.getMessage()); } finally { if (ossClient != null) { ossClient.shutdown(); } } return url; } }
controller
@PatchMapping("/updateAvatar") public Result<String> updateAvatar(@RequestParam @URL final String avatarUrl) { userService.updateAvatar(avatarUrl); return Result.success(); }
service
void updateAvatar(final String url);
impl
//更新图片 @Override public void updateAvatar(final String url) { final Map<String, Object> map = ThreadLocalUtil.get(); final Integer id = (Integer) map.get("id"); userMapper.updateAvatar(url, id); }
mapper
@Update("update user set user_pic=#{url}, update_time=now() where id=#{id}") void updateAvatar(final String url, final Integer id);