阿里-oss
文档使用手册
如何使用OSS控制台、ossutil、ossbrowser、OSSSDK_对象存储-阿里云帮助中心
1开通oss
2 创建Bucket
3 细分还可以创建文件夹
4 浏览器直接浏览
oss好像升级了,默认直接就下载文件。需要改变为 Content-Type: image/jpg ,但是也不是所有浏览器都好使。 使用https方式访问即可。
5想要word也能在线浏览(开通智能媒体即可)
代码(jdk9或以上版本需要添加jar)
OSS Java SDK的多种安装方式介绍_对象存储 OSS-阿里云帮助中心
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.15.1</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.58</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>4.6.3</version>
</dependency>
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AliyunOssConfig {
@Value("${oss.accesskey:}")
private String accesskey;
@Value("${oss.accessSecret:}")
private String accessSecret;
/**
* 域名。
*/
@Value("${oss.endpoint:}")
private String endpoint;
@Bean
public OSS ossClient() {
return new OSSClientBuilder().build(endpoint, accesskey, accessSecret);
}
}
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class OssResponse {
/**
* 访问地址 例如: http://xx.oss-cn-beijing.aliyuncs.com/uat/aa.txt
*/
private String url;
/**
* 文件完整路径(带文件名) 例如:uat/aa.txt
* 文件下载有用这个参数
*/
private String filePath;
/**
* 文件名 例如:aa.txt
*/
private String fileName;
}
import com.aliyun.oss.OSS;
import com.aliyun.oss.model.OSSObject;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
@Component
public class OssUtil {
@Value("${oss.bucketName:}")
private String bucketName;
/**
* 域名。
*/
@Value("${oss.endpoint:}")
private String endpoint;
/**
* bucket下文件夹名称
*/
@Value("${oss.fileFolder:}")
private String fileFolder;
private String http="https";
@Autowired
private OSS ossClient;
/**
* 上传文件到阿里云oss
* @param file
* @return 文件的访问路径 // http://yoing.oss-cn-beijing.aliyuncs.com/pro/exampleobjec.txt
*/
public OssResponse upload(File file) {
//文件后缀 .pdf
String suffix = file.getName().substring(file.getName().lastIndexOf("."));
String filename = UUID.randomUUID().toString();
StringBuilder key = new StringBuilder();
if(StringUtils.isNotBlank(fileFolder)){
key.append(fileFolder+"/");
}
key.append(filename+suffix);
/* ObjectMetadata meta = new ObjectMetadata();
// 指定上传的内容类型。
meta.setContentType("text/plain;charset=utf-8");
ossClient.putObject(bucketName,key.toString(),file,meta);*/
ossClient.putObject(bucketName,key.toString(),file);
StringBuilder url = new StringBuilder();
url.append(http+"://");
url.append(bucketName).append(".");
url.append(endpoint).append("/");
if(StringUtils.isNotBlank(fileFolder)){
url.append(fileFolder).append("/");
}
url.append(filename+suffix);
return new OssResponse(url.toString(),fileFolder.concat("/").concat(filename+suffix),filename+suffix);
}
/**
* 上传
* @param file
* @return
*/
public OssResponse upload(MultipartFile file) throws IOException {
String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
String filename = UUID.randomUUID().toString();
StringBuilder key = new StringBuilder();
if(StringUtils.isNotBlank(fileFolder)){
key.append(fileFolder+"/");
}
key.append(filename+suffix);
/* ObjectMetadata meta = new ObjectMetadata();
// 指定上传的内容类型。
meta.setContentType("image/png;charset=utf-8");*/
ossClient.putObject(bucketName,key.toString(),new ByteArrayInputStream(file.getBytes()));
StringBuilder url = new StringBuilder();
url.append(http+"://");
url.append(bucketName).append(".");
url.append(endpoint).append("/");
if(StringUtils.isNotBlank(fileFolder)){
url.append(fileFolder).append("/");
}
url.append(filename+suffix);
return new OssResponse(url.toString(),fileFolder.concat("/").concat(filename+suffix),filename+suffix);
}
/**
* 下载
* @param response
* @param url 例如: https://yoing.oss-cn-beijing.aliyuncs.com/pro/03e7ef10-9401-4242-96fa-27a8fba4049e.docx
* @throws IOException
*/
public void download(HttpServletResponse response,String url) throws Exception {
// 判断 bucket 是否存在
Boolean flag_bucket = ossClient.doesBucketExist(bucketName);
if(!flag_bucket){
throw new Exception("bucket不存在");
}
String[] split = url.split("\\/");
String fileName =split[split.length-1];
String filePath=fileFolder +"/"+fileName;
String[] split1 = fileName.split("\\.");
String mimeType =split1[split1.length-1];
// 判断 要下载的文件 是否存在
Boolean flag_file = ossClient.doesObjectExist(bucketName, filePath);
if(!flag_file){
throw new Exception("文件不存在,或问价路径不对");
}
OSSObject ossObject = ossClient.getObject(bucketName, filePath);
InputStream objectContent = ossObject.getObjectContent();
// response.setContentType(getContentType(mimeType));
//设置响应头类型:content-type
response.setHeader("Content-Type", getContentType(mimeType));
response.setCharacterEncoding("UTF-8");
// response.setCharacterEncoding(null); // 设置为null,否则Content-Type会带上charset=UTF-8
// 解决中文文件名乱码
response.setHeader("Content-disposition","attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
response.setHeader("filename",URLEncoder.encode(fileName, "UTF-8"));
byte[] buffer = new byte[1024];
OutputStream os = response.getOutputStream();
int len = 0;
while ((len = objectContent.read(buffer)) > 0) {
os.write(buffer, 0, len);
}
objectContent.close();
os.flush();
os.close();
}
/**
* 下载
* @param response
* @return
*/
public void download123(HttpServletResponse response,String url) throws IOException {
// 判断 bucket 是否存在
Boolean flag_bucket = ossClient.doesBucketExist(bucketName);
String filePath="pro/03e7ef10-9401-4242-96fa-27a8fba4049e.docx";
String fileName="03e7ef10-9401-4242-96fa-27a8fba4049e.docx";
String[] split = fileName.split("\\.");
String mimeType =split[split.length-1];
// 判断 要下载的文件 是否存在
Boolean flag_file = ossClient.doesObjectExist(bucketName, filePath);
OSSObject ossObject = ossClient.getObject(bucketName, filePath);
InputStream objectContent = ossObject.getObjectContent();
byte[] buffer = new byte[objectContent.available()];
objectContent.read(buffer);
objectContent.close();
response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document;charset=utf-8");
//设置响应头类型:content-type
// response.setHeader("Content-Type", getContentType(mimeType));
// response.setCharacterEncoding("UTF-8");
// response.setCharacterEncoding(null); // 设置为null,否则Content-Type会带上charset=UTF-8
// 解决中文文件名乱码
response.setHeader("Content-disposition","attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
response.setHeader("filename",URLEncoder.encode(fileName, "UTF-8"));
OutputStream ou = response.getOutputStream();
ou.write(buffer);
ou.flush();
ou.close();
}
/**
* 给访问url加过期时间
* @param url
* @return
*/
public String lookFileExpiration(String url) throws IOException, URISyntaxException {
//到期时间
Date expiration = new Date((new Date()).getTime() + 600000L);
// http://yoing.oss-cn-beijing.aliyuncs.com/pro/exampleobjec.txt
//文件夹+问价名
// String key="pro/exampleobjec.txt";
String[] endpoints = url.split(endpoint);
String key = endpoints[1].substring(1);
URL url1 = ossClient.generatePresignedUrl(bucketName, key, expiration);
String urlStringInternal = url1.toURI().toString();
String urlString = urlStringInternal.replace("-internal.", ".");
return urlString;
}
public static void main(String[] args) {
String url="https://mybucket.oss-cn-beijing.aliyuncs.com/uat/aaa.png";
//bucket
String bucketName="mybucket";
//域名
String endpoint="oss-cn-beijing.aliyuncs.com";
//文件夹
String fileFolder="uat";
}
private String getContentType(String fileName) {
Map<String, String> map = new HashMap<>();
map.put("bmp", "image/bmp");
map.put("git", "image/gif");
map.put("png", "image/png");
map.put("jpg", "image/jpeg");
map.put("jpeg", "image/jpeg");
map.put("wbmp", "image/vnd.wap.wbmp");
map.put("docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
map.put("doc", "application/msword");
map.put("xla", "application/vnd.ms-excel");
map.put("xlam", "application/vnd.ms-excel");
map.put("xlsx", "application/vnd.ms-excel");
return map.get(fileName);
}
}
CSDN-Ada助手: CS入门 技能树或许可以帮到你:https://edu.csdn.net/skill/gml?utm_source=AI_act_gml
天蓝999: 可以的,我看的另一个SpringBoot项目视频,从零开发,十天彻底掌握了项目实战:https://knife.blog.csdn.net/article/details/134911141
淼淼COLDE: 修正下,jdk版本支持那里,有些问题,参照官网哈 https://www.elastic.co/cn/support/matrix#matrix_jvm
LaOngDaoxing: [code=html] DM8 SQL [-2685]:试图在blob或者clob列上排序或比较 错误解决方法 https://www.cndba.cn/cndba/dave/article/116378 ENABLE_BLOB_CMP_FLAG: 动态参数,可以在会话级别直接修改。 用来控制DB是否支持大字段类型的比较。 0:不支持;1:支持,此时 DISTINCT、ORDER BY、 分析函数和集函数支持对大字段进行处理。 [/code]
我的搬砖日常: 这个是我以后写的时候好copy的,想偷个懒