Introducción
La publicación del blog aquí en realidad quiere mostrar una clase de herramienta para cargar archivos en Ali OSS, pero el proceso es cumplir completamente con un requisito comercial que una empresa desarrolla e implementa la carga de acuerdo con las necesidades comerciales. puede ser más complicado. Prolongado. Así que decida si necesita tomar prestado este blog de acuerdo con sus propias necesidades.
herramientas de desarrollo
idea + maven + cartero (utilizado como herramienta de prueba)
entorno de desarrollo
jdk 1.8 + SpringBoot + maven (administración de paquetes jar)
versión del paquete jar: 2.8.2
<!--阿里云oss存储-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>2.8.2</version>
</dependency>
OSS-inicializar OSSClient
Generar un objeto OSSClient configurado
punto final: dirección de solicitud con nodo regional
keyid: ID de usuario de la nube de Alibaba
Keysecret: Contraseña de usuario de la nube de Alibaba
oss.endpoint = oss-cn-shanghai.aliyuncs.com
oss.keyid= *********
oss.keysecret= *********
import com.aliyun.oss.OSSClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* oss配置类
*
* @author chenpengfei
*/
@Configuration
public class OSSClientConfig {
@Value("${oss.endpoint}")
String endpoint;
@Value("${oss.keyid}")
String accessKeyId;
@Value("${oss.keysecret}")
String accessKeySecret;
// 创建OSS客户端Bean
@Bean
public OSSClient getOSSClient() {
return new OSSClient(endpoint, accessKeyId, accessKeySecret);
}
}
Clase de herramienta de carga de OSS
bucketname: nombre del espacio de almacenamiento en la nube de Alibaba
fileHost: el nombre de dominio del servidor Ali
filePath: subir la ruta del archivo
oss.bucketname = xxxxxx
oss.fileHost= xxxxxx
oss.filePath= upload
package com.gd.common.utils.oss;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.CannedAccessControlList;
import com.aliyun.oss.model.CreateBucketRequest;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.File;
/**
* 阿里OSS上传服务
*/
@Component
@Log4j2
public class AliyunOSSUtil {
@Value("${oss.bucketname}")
String bucketName;
@Resource
private OSSClient client;
/**
* 上传文件
*/
public String upLoad(File file, String fileUrl) {
log.info("------OSS文件上传开始--------" + file.getName());
// 判断文件是否为空
if (file == null) {
return null;
}
try {
// 判断容器是否存在,不存在就创建
if (!client.doesBucketExist(bucketName)) {
client.createBucket(bucketName);
CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);
createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
client.createBucket(createBucketRequest);
// 设置权限(公开读)
client.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);
}
// 上传文件
PutObjectResult result = client.putObject(new PutObjectRequest(bucketName, fileUrl, file));
if (result != null) {
log.info("------OSS文件上传成功------" + fileUrl);
return fileUrl;
}
} catch (OSSException oe) {
log.error(oe.getMessage());
} catch (ClientException ce) {
log.error(ce.getErrorMessage());
} finally {
}
return null;
}
}
Realización de la función comercial
- Obtener la URL del nombre de dominio del servidor
- carga de un solo archivo
- Carga de varios archivos
Servicio
import org.springframework.web.multipart.MultipartFile;
public interface OssUploadService {
/**
* 上传文件
* @param file
* @return
*/
String upload(MultipartFile file);
}
impl
package com.maoni.ssmtest.service.impl;
import com.maoni.ssmtest.service.OssUploadService;
import com.maoni.ssmtest.utils.date.DatePattern;
import com.maoni.ssmtest.utils.date.DateUtils;
import com.maoni.ssmtest.utils.aliOSSUtil.AliyunOSSUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Date;
/**
* @author ouj
*/
@Service
public class OssUploadServiceImpl implements OssUploadService {
private final AliyunOSSUtil aliyunOSSUtil;
@Autowired
public OssUploadServiceImpl(AliyunOSSUtil aliyunOSSUtil){
this.aliyunOSSUtil = aliyunOSSUtil;
}
@Value("${oss.filePath}")
private String filePath;
@Override
public String upload(MultipartFile file) {
// 返回客户端文件系统中的原始文件名
String fileName = file.getOriginalFilename();
System.out.println(fileName);
try{
if (file != null) {
// 判定文件名是否为 ""
if (!"".equals(fileName.trim())) {
File newFile = new File(fileName);
FileOutputStream os = new FileOutputStream(newFile);
// 以字节数组的形式返回文件的内容,再输出到文件输出流中
os.write(file.getBytes());
os.close();
// 将接受的文件传输到给定的目标文件 file-->newFile
file.transferTo(newFile);
// 根据不同文件 类型/日期 生成不同的文件夹
Date date = new Date();
String datePath = DateUtils.formatDateByStyle(date, DatePattern.CN_DATE_BASIC_STYLE4.getDatePattern());
String timeStamp = String.valueOf(System.currentTimeMillis());
fileName = timeStamp + fileName.substring(fileName.lastIndexOf("."));
String path;
if (fileName.endsWith(".jpg") || fileName.endsWith(".jpeg") || fileName.endsWith(".png")) {
// images
path = filePath + "images/" + datePath + "/" + fileName;
} else {
path = filePath + "other/" + datePath + "/" + fileName;
}
// 上传到OSS
String uploadUrl = aliyunOSSUtil.upLoad(newFile, path);
newFile.delete();
if (uploadUrl != null) {
return uploadUrl;
}
}
}
}catch (Exception e){
e.printStackTrace();
}
return null;
}
}
controlador
import com.maoni.ssmtest.domain.OssData;
import com.maoni.ssmtest.service.OssUploadService;
import com.maoni.ssmtest.utils.AjaxResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author ouj
*/
@RestController
@Scope("prototype")
@RequestMapping("oss")
public class OssUploadController {
private final OssUploadService ossUploadService;
@Value("${oss.fileHost}")
String fileHost;
@Autowired
public OssUploadController(OssUploadService ossUploadService) {
this.ossUploadService = ossUploadService;
}
/**
* 获取服务器的ip地址
* @return
*/
@GetMapping("getHost")
public AjaxResult getHost() {
OssData ossData = new OssData();
ossData.setHost(fileHost);
return AjaxResult.AjaxSuccess(ossData);
}
/**
* oss上传文件(单个文件上传)
* @param file
* @return
*/
@PostMapping("fileUpload")
public AjaxResult fileUpload(@RequestParam("file") MultipartFile file) {
OssData ossData = new OssData();
// 上传文件返回url
String url = ossUploadService.upload(file);
if (url != null) {
ossData.setHost(fileHost);
ossData.setPath(fileHost + url);
return AjaxResult.AjaxSuccess(ossData);
} else {
return AjaxResult.AjaxError(300, "上传失败");
}
}
/**
* oss多文件上传
* @param files
* @return
*/
@PostMapping("filesUpload")
public AjaxResult filesUpload(@RequestParam("file") List<MultipartFile> files) {
OssData ossData = new OssData();
Map<String, String> urls = new HashMap<>();
for (MultipartFile file : files) {
String url = ossUploadService.upload(file);
if (url != null) {
String fileName = file.getOriginalFilename();
url = fileHost + url;
urls.put(fileName, url);
} else {
ossData.setFileName(file.getOriginalFilename());
ossData.setPath(fileHost + url);
return AjaxResult.AjaxError(100, ossData, "上传失败");
}
}
return AjaxResult.AjaxSuccess(urls);
}
/**
* oss 分俩个file,多文件上传
* @param file01
* @param file02
* @return
*/
@PostMapping("filesUploadMore")
public AjaxResult filesUploadMore(@RequestParam("file01") List<MultipartFile> file01, @RequestParam("file02") List<MultipartFile> file02) {
OssData ossData = new OssData();
Map<String, String> urls = new HashMap<>();
for (MultipartFile file : file01) {
try {
String url = ossUploadService.upload(file);
if (url != null) {
String fileName = file.getOriginalFilename();
url = fileHost + url;
urls.put(fileName, url);
} else {
ossData.setFileName(file.getOriginalFilename());
return AjaxResult.AjaxError(100, ossData, "上传失败");
}
} catch (Exception e) {
e.printStackTrace();
ossData.setFileName(file.getOriginalFilename());
return AjaxResult.AjaxError(100, ossData, "上传失败");
}
}
for (MultipartFile file : file02) {
try {
String url = ossUploadService.upload(file);
if (url != null) {
String fileName = file.getOriginalFilename();
url = fileHost + url;
urls.put(fileName, url);
} else {
ossData.setFileName(file.getOriginalFilename());
return AjaxResult.AjaxError(100, ossData, "上传失败");
}
} catch (Exception e) {
e.printStackTrace();
ossData.setFileName(file.getOriginalFilename());
return AjaxResult.AjaxError(100, ossData, "上传失败");
}
}
return AjaxResult.AjaxSuccess(urls);
}
}
Clase de paquete OssData (nombre de dominio del servidor + ruta del archivo de carga + nombre del archivo de carga)
/**
* @author ouj
*/
@Data
public class OssData {
/**
* 服务器域名
*/
private String host;
/**
* 上传文件路径
*/
private String path;
/**
* 上传文件名
*/
private String fileName;
}