1,首先得有存储空间
2,然后查看CDN加速域名
3,查看Access/Secret Key
导入七牛云的JDK
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>[7.7.0,7.7.99]</version>
</dependency>
</dependencies>
4,然后按照Spring MVC那套写Servicve、Controller
4.1 Service Interface
public interface UploadService {
/**
* 文件上传
* @param is 文件流
* @param fileName 文件名称
*/
public String uploadFile(InputStream is,String fileName);
}
4.2 Service Implement
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@Service
public class UploadServiceImpl implements UploadService{
@Autowired
QiniuConfigBean qiniuConfigBean;
@Autowired
private static final Logger LOGGER = LoggerFactory.getLogger(UploadServiceImpl.class);
@Override
public String uploadFile(InputStream is, String fileName) {
String finFileName = "";
try {
//构造一个带指定Region对象的配置类
Configuration cfg = new Configuration(Region.autoRegion());
UploadManager uploadManager = new UploadManager(cfg);
//上传凭证 看步骤3
String accessKey = "填写你自己的AK";
String secretKey = "填写你自己的SK";
//存储空间的名字
String bucket = "看步骤1,填写你自己的存储空间名字";
//临时的域名,4.24过期,需要自己去引入域名
String domain = "看步骤2,写你自己的CDN域名clouddn.com";
//七牛云文件鉴权
Auth auth = Auth.create(accessKey,secretKey);
//文件名字组成: UserTypeEnum.getClass.getSimpleName() + "^" + account + "^" + dateTime + "^" + OriginFileName 遍历
//todo !!!这里就是笔者写的DateTime工具类,文件名看自己需要修改下面这一行代码哈
finFileName = LocalDateTimeUtils.getLocalDateTime() + "^" +fileName;
if(StringUtils.isNullOrEmpty(finFileName)) throw new MsgException("上传失败,请重试");
String upToken = auth.uploadToken(bucket);
Response response = uploadManager.put(is,finFileName,upToken,null,null);
//解析上传成功的结果
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(),DefaultPutRet.class);
System.out.println(putRet.key + " " +putRet.hash);
return domain + "/" +putRet.key;
} catch (QiniuException e) {
Response r = e.response;
LOGGER.info(r.getInfo());
throw new MsgException("存储文件失败");
}catch (MsgException e){
LOGGER.error(e.getMessage());
throw e;
} catch (NoSuchMethodException e) {
LOGGER.error(e.getMessage());
return null;
} catch (IllegalAccessException e) {
LOGGER.error(e.getMessage());
return null;
} catch (InvocationTargetException e) {
LOGGER.error(e.getMessage());
return null;
}catch (Exception e){
LOGGER.error(e.getMessage());
throw e;
}
}
}
4.3 Controller
@Slf4j
@Api(tags = "文件API")
@RestController
public class UploadController {
@Autowired
private UploadService uploadService;
@ApiOperation("上传文件")
@SaCheckLogin
@PostMapping(value = "/upload",consumes = MediaType.MULTIPART_FORM_DATA_VALUE) //My file.getInputStream(), file.getOriginalFilename()
public SysResult upload(@RequestPart("file") MultipartFile file){
try {
if(file.isEmpty()){
throw new MsgException("空文件");
}
String uploadFile = uploadService.uploadFile(file.getInputStream(),file.getOriginalFilename());
Map<String,Object> map = new HashMap<>();
map.put("url",uploadFile);
if(uploadFile == null) throw new MsgException("上传失败");
return new SysResult(SysResultEnum.SUCCESS.getIndex(),SysResultEnum.SUCCESS.getName(),map);
} catch (MsgException e) {
return new SysResult(SysResultEnum.Client_ERROR.getIndex(),e.getMessage(),null);
}catch (Exception e){
return new SysResult(SysResultEnum.SYS_ERROR.getIndex(),e.getMessage(),null);
}
}
}
5,测试(Swagger UI我就不赘述了)
原本没有这个PDF,如下
点击execute执行,请求成功,返回url。
结果:
以URI形式访问/下载 上传的文档: