web端上传静态资源至阿里云OSS

鉴于安全性,本文采用的是服务端签名后直传方式。
本文分为两部分讲解:

  1. JavaScript客户端签名直传
  2. 小程序签名直传

服务端签名后直传 — 官方文档

服务端签名后直传

一、JavaScript客户端签名直传

上传中使用了 plupload. 详见plupload官方文档
阿里云 JavaScript客户端签名直传 官方文档

本文中的代码是经过删改过后的代码,若想看完整的具体代码,请点击:
阿里官方客户端代码 下载

// html部分
<div id="upload-container">
  <div id="upload-monitor">
      <span>上传</span>
  </div>
</div>

// 代码中使用的Base64、Crypto、plupload在官方客户端代码中均有
var fileName = ''; // 上传的文件名称。可以使用原本的文件名称,也可以使用随机的文件名(自由发挥)
var accessid = ''; // 记录请求后端接口获取到的阿里的accessid
var accesskey = ''; // 记录请求后端接口获取到的阿里的accesskey
var token = ''; // 记录请求后端接口获取到的阿里的token
var host = 'http://xxx.xxx.aliyuncs.com'; // OSS访问域名
var policyBase64 = ''; // 上传文件时所需要的policy
var signature = ''; // 签名
var uploadConfig = {
   }; // 定义的上传的配置对象
// 获取阿里token等相关信息的方法
function getToken(){
   }

getToken().then(function(res){
   
	if(res.success){
   
		// (这个看后端返回的字段名叫什么,此处是随便一写~)
		accessid = res.accessid; 
		accesskey = res.accesskey;
		token = res.token;
		
		var policyText = {
   
			 //设置该Policy的失效时间,超过这个失效时间之后,就没有办法通过这个policy上传文件了
	         'expiration': res.expiration,         
	         'conditions': [
	             ['content-length-range', 0, 1048576000] // 设置上传文件的大小限制
	         ]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
将图片上传阿里云OSS并存入MySQL可以分为以下几个步骤: 1. 添加阿里云OSS依赖 ```xml <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.10.2</version> </dependency> ``` 2. 配置阿里云OSS参数 ```java @Configuration public class OSSConfig { @Value("${spring.aliyun.oss.access-key-id}") private String accessKeyId; @Value("${spring.aliyun.oss.access-key-secret}") private String accessKeySecret; @Value("${spring.aliyun.oss.endpoint}") private String endpoint; @Value("${spring.aliyun.oss.bucket-name}") private String bucketName; @Bean public OSSClient ossClient() { return new OSSClient(endpoint, accessKeyId, accessKeySecret); } @Bean public OSSProperties ossProperties() { return new OSSProperties(accessKeyId, accessKeySecret, endpoint, bucketName); } } ``` 3. 编写上传图片的服务类 ```java @Service public class ImageService { private final OSSClient ossClient; private final OSSProperties ossProperties; @Autowired public ImageService(OSSClient ossClient, OSSProperties ossProperties) { this.ossClient = ossClient; this.ossProperties = ossProperties; } public String uploadImage(MultipartFile file) throws Exception { String filename = file.getOriginalFilename(); InputStream inputStream = file.getInputStream(); String key = UUID.randomUUID().toString() + "-" + filename; ossClient.putObject(ossProperties.getBucketName(), key, inputStream); return key; } } ``` 4. 将上传的图片信息存入MySQL ```java @Service public class ImageInfoService { private final ImageInfoRepository imageInfoRepository; @Autowired public ImageInfoService(ImageInfoRepository imageInfoRepository) { this.imageInfoRepository = imageInfoRepository; } public void saveImageInfo(String filename, String key) { ImageInfo imageInfo = new ImageInfo(); imageInfo.setFilename(filename); imageInfo.setKey(key); imageInfoRepository.save(imageInfo); } } ``` 5. 控制器中调用上传图片的服务类和存入MySQL的服务类 ```java @RestController @RequestMapping("/image") public class ImageController { private final ImageService imageService; private final ImageInfoService imageInfoService; @Autowired public ImageController(ImageService imageService, ImageInfoService imageInfoService) { this.imageService = imageService; this.imageInfoService = imageInfoService; } @PostMapping("/upload") public Result uploadImage(@RequestParam("file") MultipartFile file) { try { String key = imageService.uploadImage(file); imageInfoService.saveImageInfo(file.getOriginalFilename(), key); return Result.success("上传成功"); } catch (Exception e) { e.printStackTrace(); return Result.error("上传失败"); } } } ``` 以上就是将图片上传阿里云OSS并存入MySQL的实现过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值