使用阿里云对象存储OSS(官网文档)上传文件(学习笔记) 注:要先去官网开通对象存储OSS
前端代码(html
或者jsp
页面)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>个人文件上传test网站</title>
</head>
<script type="text/javascript" src="js/jquery-3.3.1.min.js"></script>
<body>
<!--必须是表单包起来 有name属性-->
<form id="inputForm">
<input type="file" name="updateUrl" onchange="updatefile()">
</form>
<div>
<table>
<tr>
<td id="tset">
<!--回显上传后的连接-->
</td>
</tr>
</table>
</div>
</body>
<script type="text/javascript">
function updatefile() {
var formData = new FormData($("#inputForm")[0]);
$.ajax({
url: "/test/updatefile",
async: false,
type: "POST",
data: formData,
cache: false,
contentType: false,
processData: false,
success: function (updateVersionFile) {
//插入个 a标签 回显示地址
$("#tset").html("<a href=\""+updateVersionFile+"\">点击查看</a>");
}
});
}
</script>
</html>
后端代码(控制层
)
/**
* 文件上传
* @param multipartFile
* @return
*/
@PostMapping("/updatefile")
public String getlist(@RequestParam(value = "updateUrl", required = false) MultipartFile multipartFile){
InputStream inputStream=null;
try {
inputStream = multipartFile.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
//拼接文件夹名字会指定上传到存储空间下面的子文件夹
String originalFilename = "meinv/"+multipartFile.getOriginalFilename();
//使用封装的工具类进行上传
OssManager.uploadBucketImage("chenzhihao-space", originalFilename, multipartFile.getSize(), inputStream);
//不需要查询直接拼接域名访问文件返回也是可以的
String url="chenzhihao-space.oss-cn-shenzhen.aliyuncs.com/"+ "meinv/" +multipartFile.getOriginalFilename();
//第2种方式查询上传文件后的访问地址
//String url = OssManager.getUrl(originalFilename);
return url;
}
访问域名带上文件路径,即可通过互联网访问到 Bucket 内的任意文件。如果 ACL 是私有读,则还需要带上签名,URL 拼写规则:chenzhihao-*****.oss-cn-shenzhen.aliyuncs.com/meinv/文件名
配置文件(springmvc.xml
):
<!-- 配置多媒体解析器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"></property>
<!-- 设定文件上传的最大值100MB,100*1024*1024 -->
<property name="maxUploadSize" value="104857600"></property>
</bean>
**阿里云(OSS
)的上传工具类:
package com.dome.ossutil;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.ObjectMetadata;
import java.io.InputStream;
import java.net.URL;
import java.util.Date;
/**
* @Description: TODO 阿里云开放存储服务 工具类
* @date 2019年8月8日
* @author *
*/
public class OssManager {
private static final String accessKeyId = "LT***********"; //需要修改的 个人开发id
private static final String accessKeySecret = "Llf**************"; //需要修改的 开发密匙
/**
* 需要修改
* 根据选择的存储空间地点选择:https://help.aliyun.com/document_detail/31837.html?spm=a2c4g.11186623.2.10.5d396a3eVRGHxs#h2-url-1
*/
private static final String endpoint = "http://oss-cn-shenzhen.aliyuncs.com";
/**
* 需要修改的存储空间的名称
*/
public static final String bucket = "chenzhihao";
private static OSS client;
static {
client = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
}
/**
* 上传图片
* @param fileName 图片名称,图片名称包括文件夹名称和“/”
* @param length 图片大小
* @param content 输入流
*/
public static void uploadImage(String fileName, long length, InputStream content) {
uploadBucketImage(bucket, fileName, length, content);
}
/**
* 上传文件
* @param bucket 存储空间名
* @param fileName 文件名(包括文件夹名称和“/”)
* @param length 流的长度
* @param content 输入流
*/
public static void uploadBucketImage(String bucket, String fileName, long length, InputStream content) {
// 创建上传Object的Metadata
ObjectMetadata meta = new ObjectMetadata();
// 必须设置ContentLength
meta.setContentLength(length);
// 上传Object.
client.putObject(bucket, fileName, content, meta);
}
/**
* 删除文件
* @param fileName 文件名称,图片名称包括文件夹名称和“/”
*/
public static boolean delShopImage(String fileName) {
//判断文件是否存在
boolean exist = client.doesObjectExist(bucket, fileName);
//文件不存在删除失败
if ( ! exist){
return false;
}
//执行删除
client.deleteObject(bucket, fileName);
return true;
}
/**
* 获得上传文件后url链接
* @param fileName 文件名(包括文件夹名称和“/”)
* @return
*/
public static String getUrl(String fileName) {
// 设置URL过期时间为10年 3600l* 1000*24*365*10
Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 10);
// 生成URL
URL url = client.generatePresignedUrl(bucket, fileName, expiration);
if (url != null) {
return url.toString();
}
return null;
}
/**
* 创建存储空间
* @param bucketName 新建存储空间默认为标准存储类型,私有权限。
* @return
*/
public static void crateBucket(String bucketName) {
// 新建存储空间默认为标准存储类型,私有权限。
client.createBucket(bucketName);
}
}
**pom
文件依赖:
<!--oss文件上传-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.1</version>
</dependency>