//原生获取微信信息CodeWxUserInfoVo,然后将头像上传至自己的linux服务器
//因为上传用的是 MultipartFile file所以我下载图片后返回了MultipartFile文件的格式
//访问的时候自己的域名获取ip加这个文件路径
先导包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-mock</artifactId>
<version>2.0.8</version>
</dependency>
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.http.HttpUtil;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.nio.file.Files;
/**
*工具类
/
public class ImageUtil {
//服务器地址
public static final String lujinUrl="root/****/***/";
//本地地址
// public static final String lujinUrl="F:\\testimage\\";
public static MultipartFile uploadWxAvg(String imgUrl) throws IOException {
File destFile = new File(lujinUrl+ IdUtil.randomUUID() +".png");
HttpUtil.downloadFile(imgUrl, destFile);
InputStream inputStream = new FileInputStream(destFile);
MultipartFile multipartFile = new MockMultipartFile(destFile.getName(), destFile.getName(), Files.probeContentType(destFile.toPath()),inputStream);
return multipartFile;
}
}
//这里用返回给前段或者自己用,url就是自己服务器的地址了,我是返回前段,前段将信息还有别的信息传给我在别的地方使用的,根据你们的情况用url就好了
@Autowired
OSSConfig ossConfig;
@Override
public Map createUserInfo(CodeWxUserInfoVo codeWxUserInfoVo) throws IOException {
MultipartFile avatar=ImageUtil.uploadWxAvg(codeWxUserInfoVo.getWxProfile());
String url = OSSBootUtil.uploadOSS(ossConfig, avatar);
codeWxUserInfoVo.setWxProfile(url);
Map map = new HashMap();
map.put("WxUserInfo",codeWxUserInfoVo);
return map;
}
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import java.io.Serializable;
/**
* @Description: 阿里云 OSS 配置信息自己在配置文件配好
*/
@Data
@Configuration
public class OSSConfig implements Serializable {
private static final long serialVersionUID = -119396871324982279L;
/**
* 阿里云 oss 站点
*/
@Value("${oss.endpoint}")
private String endpoint;
/**
* 阿里云 oss 资源访问 url
*/
@Value("${oss.url}")
private String url;
/**
* 阿里云 oss 公钥
*/
@Value("${oss.accessKeyId}")
private String accessKeyId;
/**
* 阿里云 oss 私钥
*/
@Value("${oss.accessKeySecret}")
private String accessKeySecret;
/**
* 阿里云 oss 文件根目录
*/
@Value("${oss.bucketName}")
private String bucketName;
}
package com.xinhao.model.vo.codeUserVo;
import com.xinhao.annotation.Create;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@Data
@ApiModel(value = "微信授权InfoVo")
public class CodeWxUserInfoVo {
@ApiModelProperty(value = "微信openId")
private String wxOpenId;
@ApiModelProperty(value = "微信nickname")
private String wxNickname;
@ApiModelProperty(value = "微信profile")
private String wxProfile;
}
import com.aliyun.oss.ClientConfiguration;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.common.auth.DefaultCredentialProvider;
import com.aliyun.oss.model.ObjectMetadata;
import com.xinhao.configurer.OSSConfig;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.http.entity.ContentType;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import javax.net.ssl.HttpsURLConnection;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/**
* @Description: 阿里云 oss 上传工具类(高依赖版)
*/
@Slf4j
public class OSSBootUtil {
private OSSBootUtil(){}
/**
* oss 工具客户端
*/
private volatile static OSSClient ossClient = null;
/**
* 上传文件至阿里云 OSS
* 文件上传成功,返回文件完整访问路径
* 文件上传失败,返回 null
*
* @param ossConfig oss 配置信息
* @param file 待上传文件
* @param fileDir 文件保存目录upload/
* @return oss 中的相对文件路径
*/
public static String upload(OSSConfig ossConfig, MultipartFile file, String fileDir){
initOSS(ossConfig);
StringBuilder fileUrl = new StringBuilder();
try {
String originalFilename = file.getOriginalFilename();
int i = originalFilename.lastIndexOf('.');
String suffix = originalFilename.substring(i);
//1590745324257-8fd76627-5cdc-478f.jpg
String fileName = System.currentTimeMillis() + "-" + UUID.randomUUID().toString().substring(0,18) + suffix;
if (!fileDir.endsWith("/")) {
fileDir = fileDir.concat("/");
}
fileUrl = fileUrl.append(fileDir + fileName);
// 添加 ContentType
ObjectMetadata objectMetadata = new ObjectMetadata();
// objectMetadata.setContentType("image/jpg");
objectMetadata.setContentType(getcontentType(fileName.substring(fileName.lastIndexOf("."))));
ossClient.putObject(ossConfig.getBucketName(), fileUrl.toString(), file.getInputStream(),objectMetadata);
} catch (IOException e) {
e.printStackTrace();
return null;
}
//fileUrl = fileUrl.insert(0,ossConfig.getUrl());
return fileUrl.toString();
}
/**
* 初始化 oss 客户端
* @param ossConfig
* @return
*/
private static OSSClient initOSS(OSSConfig ossConfig) {
if (ossClient == null ) {
synchronized (OSSBootUtil.class) {
if (ossClient == null) {
ossClient = new OSSClient(ossConfig.getEndpoint(),
new DefaultCredentialProvider(ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret()),
new ClientConfiguration());
}
}
}
return ossClient;
}
public static String uploadOSS(OSSConfig ossConfig, MultipartFile file) {
// 高依赖版本 oss 上传工具
String ossFileUrlBoot = OSSBootUtil.upload(ossConfig, file, "upload");
return ossFileUrlBoot;
}
public static String getcontentType(String FilenameExtension) {
if (FilenameExtension.equalsIgnoreCase(".bmp")) {
return "image/bmp";
}
if (FilenameExtension.equalsIgnoreCase(".gif")) {
return "image/gif";
}
if (FilenameExtension.equalsIgnoreCase(".jpeg") ||
FilenameExtension.equalsIgnoreCase(".jpg") ||
FilenameExtension.equalsIgnoreCase(".png")) {
return "image/jpg";
}
if (FilenameExtension.equalsIgnoreCase(".html")) {
return "text/html";
}
if (FilenameExtension.equalsIgnoreCase(".txt")) {
return "text/plain";
}
if (FilenameExtension.equalsIgnoreCase(".vsd")) {
return "application/vnd.visio";
}
if (FilenameExtension.equalsIgnoreCase(".pptx") ||
FilenameExtension.equalsIgnoreCase(".ppt")) {
return "application/vnd.ms-powerpoint";
}
if (FilenameExtension.equalsIgnoreCase(".docx") ||
FilenameExtension.equalsIgnoreCase(".doc")) {
return "application/msword";
}
if (FilenameExtension.equalsIgnoreCase(".xml")) {
return "text/xml";
}
return "image/jpg";
}
/**
* 上传文件至阿里云 OSS
* 文件上传成功,返回文件完整访问路径
* 文件上传失败,返回 null
*
* @param ossConfig oss 配置信息
* @param file 待上传文件
* @param fileDir 文件保存目录
* @return oss 中的相对文件路径
*/
public static Map uploadVideo(OSSConfig ossConfig, MultipartFile file, String fileDir,String targerFilePath){
initOSS(ossConfig);
Map res = new HashMap();
StringBuilder fileUrl = new StringBuilder();
try {
String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf('.'));
String fileName = System.currentTimeMillis() + "-" + UUID.randomUUID().toString().substring(0,18) + suffix;
if (!fileDir.endsWith("/")) {
fileDir = fileDir.concat("/");
}
fileUrl = fileUrl.append(fileDir + fileName);
ossClient.putObject(ossConfig.getBucketName(), fileUrl.toString(), file.getInputStream());
res.put("videoUrl",fileUrl.toString());
//第一帧
File first = ToolVideo.getFirst(file,res,targerFilePath);
String firstName = System.currentTimeMillis() + "-" + UUID.randomUUID().toString().substring(0,18) + ".jpg";
String firstUrl = fileDir + firstName;
// 添加 ContentType
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentType(getcontentType(firstUrl.substring(firstUrl.lastIndexOf("."))));
ossClient.putObject(ossConfig.getBucketName(), firstUrl, first,objectMetadata);
res.put("firstUrl",firstUrl);
log.info("第一帧的URL:{}",firstUrl);
} catch (IOException e) {
e.printStackTrace();
return null;
}
return res;
}
}