controller层
先获取登录用户,调用方法传递文件
@PostMapping("/update/userAvatar")
public BaseResponse<Boolean> updateUserAvatar(@RequestPart("file") MultipartFile file,
HttpServletRequest request) {
try {
User user = userService.getLoginUser(request);
String url = userService.UpdateAvatar(file);
user.setUserAvatar(url);
boolean result = userService.updateById(user);
return ResultUtils.success(true);
} catch (Exception ex) {
// Handle the error and return appropriate response
}
}
service层
/**
*
* @param uploadFile
* @return
*/
String UpdateAvatar(MultipartFile uploadFile);
impl层
@Override
public String UpdateAvatar(MultipartFile uploadFile) {
// 创建七牛云配置对象,存储区域,这里是华南区域地址
Configuration cfg = new Configuration(Zone.zone2());
cfg.resumableUploadAPIVersion = Configuration.ResumableUploadAPIVersion.V2;
// 创建上传管理器
UploadManager uploadManager = new UploadManager(cfg);
// 七牛云的 Access Key 和 Secret Key
String ACCESS_KEY = "";
String SECRET_KEY = "";
// 存储空间名
String bucketname = "";
// 默认文件名(设置为null则会使用hash值作为文件名,就是下面的putRet.hash)
String key = null;
// 创建七牛云授权对象
Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
// 生成上传凭证
String upToken = auth.uploadToken(bucketname);
try {
// 将 MultipartFile 对象转换为字节数组
byte[] fileBytes = uploadFile.getBytes();
// 使用上传管理器上传文件,并获取响应
Response response = uploadManager.put(fileBytes, key, upToken);
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
// 获取基础URL
String baseUrl = "http://<domain>"; // 请替换<domain>为你的七牛云存储空间的域名
// 拼接访问链接
String fileUrl = baseUrl + "/" + putRet.key;
String url = auth.privateDownloadUrl(fileUrl);
// 打印上传结果信息
System.out.println("Key: " + putRet.key);
System.out.println("Hash: " + putRet.hash);
System.out.println("url: " + url);
// 返回文件访问链接
return url;
} catch (QiniuException ex) {
// 处理七牛云异常
ex.printStackTrace();
if (ex.response != null) {
System.err.println(ex.response);
try {
String body = ex.response.bodyString();
System.err.println("Response body: " + body);
} catch (Exception ignored) {
}
}
return null;
} catch (Exception e) {
// 处理其他异常
e.printStackTrace();
return null;
}
}
结束后返回文件的可访问链接。