阿里云文件上传快速上手
1.创建BUCKET
首先登录阿里云搜索对象储存OSS 进入如下界面:
点击创建Bucket 根据自身需求创建
创建完毕后点击bucket列表即可查看创建的所有bucket
点击bucket 即可查看并修改bucket 详情,包括Endpoint bucket域名等信息
点击右上用户头像即可查看ACCESS_KEY的相关信息(注意保密)
2.导入依赖
<!--阿里云文件上传-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.8.0</version>
</dependency>
3.导入阿里云客户端工具类和文件上传工具类
/**
* 阿里云OSS工具类
*/
@Component
public class AliOssClient {
private Logger log = LoggerFactory.getLogger(getClass());
private static String ACCESS_KEY_ID = "**根据自己的ACCESS_KEY填写**";
private static String ACCESS_KEY_SECRET = "**根据自己的ACCESS_SECRET填写**";
private static String BUCKET = "shiu-changgou";
private static String ENDPOINT = "https://oss-cn-beijing.aliyuncs.com";
private static String CDN_URL = "https://s123.oss-cn-beijing.aliyuncs.com";
/**
* 字节方式上传
*/
public boolean uploadFileByBytes(String path, byte[] content) {
OSS client = getOSSClient();
try {
String filename = getFilename(path);
if (!"".equals(filename)) {
String suffix = filename.substring(filename.lastIndexOf(".")).toLowerCase();
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType(getcontentType(suffix));
client.putObject(BUCKET, filename, new ByteArrayInputStream(content), metadata);
client.shutdown();
return true;
}
} catch (Exception e) {
log.error(e.getMessage());
}
return false;
}
/**
* 流方式上传
*/
public String uploadFileByStream(String path, InputStream is, String suffix) {
OSS client = getOSSClient();
try {
if (!suffix.startsWith(".")) {
suffix = "." + suffix;
}
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType(getcontentType(suffix));
String fileName = getFilename(path) + suffix;
PutObjectRequest request = new PutObjectRequest(BUCKET, fileName, is, metadata);
client.putObject(request);
client.shutdown();
return String.format("%s/%s", CDN_URL, fileName);
} catch (Exception e) {
log.error(e.getMessage());
}
return null;
}
/**
* 本地文件上传
*/
public String uploadFileByLocal(String path, String local) {
OSS client = getOSSClient();
try {
File file = new File(local);
String fileName = file.getName();
String suffix = fileName.substring(fileName.lastIndexOf(".")).toLowerCase();
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType(getcontentType(suffix));
String tempFileName = getFilename(path) + fileName.substring(fileName.indexOf("."));
PutObjectRequest request = new PutObjectRequest(BUCKET, tempFileName, file, metadata);
PutObjectResult result = client.putObject(request);
client.shutdown();
return String.format("%s/%s", CDN_URL, tempFileName);
} catch (Exception e) {
log.error(e.getMessage());
}
return null;
}
/**
* 判断文件是否存在
*/
public boolean exists(String path) {
OSS client = getOSSClient();
String filename = getFilename(path);
if (!"".equals(filename)) {
return client.doesObjectExist(BUCKET, path);
}
return false;
}
private String generateUUID() {
return UUID.randomUUID().toString().replaceAll("-", "");
}
private String getFilename(String path) {
if (path.startsWith("/")) {
path = path.substring(1);
}
if (path.endsWith("/")) {
path = path.substring(0, path.length() - 1);
}
return String.format("%s/%s%s", path, FileUtil.getAbsolutePath(), generateUUID());
}
private OSS getOSSClient() {
ClientBuilderConfiguration conf = new ClientBuilderConfiguration();
conf.setSupportCname(true);
return new OSSClientBuilder().build(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET);
}
public String uploadFileByStream2(InputStream is, String suffix) {
OSS client = getOSSClient();
try {
String fileName = generateUUID() + "." + suffix;
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType(getcontentType(suffix));
PutObjectRequest request = new PutObjectRequest(BUCKET, fileName, is, metadata);
client.putObject(request);
client.shutdown();
return String.format("%s/%s", CDN_URL, fileName);
} catch (Exception e) {
log.error(e.getMessage());
}
return null;
}
/**
* 获取contentType,避免访问非预览直接下载问题
* @param FilenameExtension
* @return
*/
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";
}
}
/**
* 文件上传工具类
*/
public class FileUtil {
/**
* 文件保存后的根路径,自定义
*/
public static String FILE_ROOT_PATH = "/";
// 获得文件扩展名(小写不带.)
public static String getExtensionType(String str) {
return !StringUtils.isEmpty(str) && str.lastIndexOf(".") >= 0 ? str.substring(str.lastIndexOf(".") + 1, str.length()).toLowerCase() : null;
}
public static String getAbsolutePath() {
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1;
int day = cal.get(Calendar.DATE);
return year + "/" + month + "/" + day + "/";
}
}
4.测试文件上传
@PostMapping(value = "/upLoad")
public Result upLoadHeadPicture(HttpServletRequest request) {
if (request instanceof MultipartHttpServletRequest) {
try {
MultipartFile multipartFile = ((MultipartHttpServletRequest) request).getFile("pic");
assert multipartFile != null;
String name = multipartFile.getOriginalFilename();
assert name != null;
String suffix = name.substring(name.lastIndexOf(".")).toLowerCase();
String picUrl = "";
if (!".jpg".equals(suffix) && !".png".equals(suffix)) {
throw new RuntimeException("头像格式不合法!");
}
picUrl = aliOssClient.uploadFileByStream(Constants.HEAD_PIC, multipartFile.getInputStream(), suffix);
return new Result(true, StatusCode.OK, "头像上传成功", picUrl);
} catch (Exception e) {
logger.error(e.getMessage(), e);
throw new RuntimeException("上传头像失败");
}
}
return new Result(false, StatusCode.ERROR, "头像上传失败");
}
5.Postman 测试
请求地址及传参:
正确响应:
访问图片连接效果:
阿里云查看图片位置: