package com.stylefeng.guns.modular.file;
|
|
import com.aliyun.oss.OSS;
|
import com.aliyun.oss.OSSException;
|
import com.aliyun.oss.common.comm.ResponseMessage;
|
import com.aliyun.oss.common.comm.ServiceClient;
|
import com.aliyun.oss.model.OSSObject;
|
import com.aliyun.oss.model.ObjectMetadata;
|
import com.aliyun.oss.model.PutObjectResult;
|
import org.apache.commons.lang.StringUtils;
|
import org.apache.http.client.methods.CloseableHttpResponse;
|
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.IOException;
|
import java.io.InputStream;
|
import java.net.URL;
|
import java.util.Date;
|
|
@Service
|
public class OSSService {
|
|
@Autowired
|
private OSS ossClient;
|
|
@Value("${oss.bucketName}")
|
private String bucketName;
|
|
public String uploadFile(MultipartFile file) {
|
try {
|
String fileName = file.getOriginalFilename();
|
// if (fileName.equals("")){
|
// fileName = "test.jpg";
|
// }
|
ossClient.putObject(bucketName, fileName, file.getInputStream());
|
String uri ="https://bizuphk.oss-cn-hongkong.aliyuncs.com/";
|
System.err.println("小程序二维码:"+uri+fileName);
|
return uri+fileName;
|
// String fileName = file.getOriginalFilename();
|
// PutObjectResult putObjectResult = ossClient.putObject(bucketName, fileName, file.getInputStream());
|
// System.err.println("看看返回的文件名");
|
// System.err.println(fileName);
|
// return fileName;
|
} catch (IOException e) {
|
// 处理上传失败的逻辑
|
}
|
return null;
|
}
|
public InputStream downloadFile(String fileName) {
|
try {
|
OSSObject object = ossClient.getObject(bucketName, fileName);
|
return object.getObjectContent();
|
} catch (OSSException e) {
|
// 处理下载失败的逻辑
|
}
|
return null;
|
}
|
/**
|
* 上传到OSS服务器 如果同名文件会覆盖服务器上的
|
*
|
* @param instream 文件流
|
* @param fileName 文件名称 包括后缀名
|
* @return 出错返回"" ,唯一MD5数字签名
|
*/
|
public String uploadFile2OSS(InputStream instream, String fileName) {
|
String ret = "";
|
try {
|
// 创建上传Object的Metadata
|
ObjectMetadata objectMetadata = new ObjectMetadata();
|
objectMetadata.setContentLength(instream.available());
|
objectMetadata.setCacheControl("no-cache");
|
objectMetadata.setContentType(getContentType(fileName.substring(fileName.lastIndexOf("."))));
|
objectMetadata.setHeader("Pragma", "no-cache");
|
// objectMetadata.setContentDisposition("inline;filename=" + fileName);
|
// 上传文件
|
PutObjectResult putResult = ossClient.putObject(bucketName, fileName, instream, objectMetadata);
|
ret = putResult.getETag();
|
} catch (IOException e) {
|
System.err.println(e.getMessage());
|
} finally {
|
try {
|
if (instream != null) {
|
instream.close();
|
}
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
return ret;
|
}
|
|
/**
|
* 通过文件名判断并获取OSS服务文件上传时文件的contentType
|
*
|
* @param filenameExtension 文件名
|
* @return 文件的contentType
|
*/
|
public static final String getContentType(String filenameExtension) {
|
|
if (filenameExtension.equalsIgnoreCase(".bmp")) {
|
return "application/x-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(".xla") ||
|
filenameExtension.equalsIgnoreCase(".xlc") ||
|
filenameExtension.equalsIgnoreCase(".xlm") ||
|
filenameExtension.equalsIgnoreCase(".xls") ||
|
filenameExtension.equalsIgnoreCase(".xlt") ||
|
filenameExtension.equalsIgnoreCase(".xlw")) {
|
return "application/vnd.ms-excel";
|
}
|
if (filenameExtension.equalsIgnoreCase(".xlsx")) {
|
return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
|
}
|
if (filenameExtension.equalsIgnoreCase(".xml")) {
|
return "text/xml";
|
}
|
if (filenameExtension.equalsIgnoreCase(".pdf")) {
|
return "application/pdf";
|
}
|
if (filenameExtension.equalsIgnoreCase(".zip")) {
|
return "application/zip";
|
}
|
if (filenameExtension.equalsIgnoreCase(".tar")) {
|
return "application/x-tar";
|
}
|
if (filenameExtension.equalsIgnoreCase(".avi")) {
|
return "video/avi";
|
}
|
if (filenameExtension.equalsIgnoreCase(".mp4")) {
|
return "video/mpeg4";
|
}
|
if (filenameExtension.equalsIgnoreCase(".mp3")) {
|
return "audio/mp3";
|
}
|
if (filenameExtension.equalsIgnoreCase(".mp2")) {
|
return "audio/mp2";
|
}
|
// 默认下载
|
// return "application/octet-stream";
|
return "image/jpg";
|
}
|
|
/**
|
* 获得url链接
|
*
|
* @param key
|
* @return
|
*/
|
public String getUrl(String key) {
|
// 设置URL过期时间为10年 3600l* 1000*24*365*10
|
Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 10);
|
// 生成URL
|
URL url = ossClient.generatePresignedUrl(bucketName, key, expiration);
|
System.out.println("url: " + url);
|
if (url != null) {
|
String host = "https://" + url.getHost() + url.getPath();
|
System.out.println("host: " + host);
|
// http://wxcall-xiaobanben.oss-cn-shenzhen.aliyuncs.com/image/20220129/1643469496754508.jpg
|
return host;
|
}
|
return "";
|
}
|
/**
|
* 获得图片路径
|
*
|
* @param fileUrl
|
* @return
|
*/
|
public String getImgUrl(String fileUrl) {
|
System.out.println(fileUrl);
|
if (!StringUtils.isEmpty(fileUrl)) {
|
// String[] split = fileUrl.split("/");
|
return this.getUrl(fileUrl);
|
}
|
return "";
|
}
|
|
|
|
|
|
}
|