阿里云OSS无法使用图片URL访问,访问时提示下载【已解决】 |
您所在的位置:网站首页 › 为什么1688的图片不能下载 › 阿里云OSS无法使用图片URL访问,访问时提示下载【已解决】 |
实现图片上传到oss,解决阿里云OSS无法使用图片URL访问,访问时提示下载,不用申请域名。
简单图片上传
实现图片上传到oss,解决阿里云OSS无法使用图片URL访问,访问时提示下载,不用申请域名。创建 Bucket建立RAM账号 链接: [官方文档](https://help.aliyun.com/document_detail/93720.html).
根据官方文档 编写简单上传填坑环节二次修改修改文件太大,spring报错的问题
三次修改关于返回路径的问题
创建 Bucket
右上方选择创建 Bucket,可以看到下方有很多常用入口 ![]() ![]() ![]() ![]() 创建 AccessKey,及时记录下来,如果忘记了,可以重新创建 添加权限(此处指OSS权限) controller @PostMapping("/fileUpload.json") public String fileUpload(@RequestParam("file") MultipartFile file) throws FileNotFoundException { if (file.isEmpty()) { return "上传文件内容为空,请重新选择"; } String tempFilePath = this.getClass().getResource("/").getPath(); String fileName = file.getOriginalFilename(); File tempFile = new File(tempFilePath + fileName); try { file.transferTo(tempFile); //return "上传成功" + tempFilePath + fileName; } catch (IOException e) { e.printStackTrace(); } return ossConfig.fileUpload(fileName, tempFilePath + fileName); } package com.jgybzx.config; import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.model.ObjectMetadata; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Date; /** * @author jgybzx * @date 2020/12/21 15:40 * @description 用于连接阿里 OSS 对象存储的必要条件,放在配置文件中,以ConfigurationProperties方式读取 */ @Component @ConfigurationProperties(prefix = "oss") public class OssConfig { /** * 使用自己真实的地址 */ private String endpoint; /** * 之前复制的 accessKeyId */ private String accessKeyId; /** * 之前复制的 accessKeySecret */ private String accessKeySecret; /** * 自己新建的 bucketName */ private String bucketName; /** * @param fileName 文件上传时的名字 * @param tempFilePath 文件保存到本地时的临时目录,用于生产文件流 * @return * @throws FileNotFoundException */ public String fileUpload(String fileName, String tempFilePath) throws FileNotFoundException { // 用于在OSS上命名,建议格式 :年月日/文件名.后缀名,此时可以 以时间建立一个文件夹保存上传的图片 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); String transformDate = simpleDateFormat.format(new Date()); String objectName = transformDate + "/" + System.currentTimeMillis() + "_" + fileName; // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // 上传文件流。 InputStream inputStream = new FileInputStream(tempFilePath); ossClient.putObject(bucketName, objectName, inputStream); // 返回一个带有时间限制的 访问连接,(此处坑很大) Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000); String url = ossClient.generatePresignedUrl(bucketName, objectName, expiration).toString(); // 关闭OSSClient。 ossClient.shutdown(); return url.split("\\?")[0]; } /*省略get set*/ }结果展示 ![]() 配置文件添加配置 properties写法 spring.servlet.multipart.max-file-size=500MB spring.servlet.multipart.max-request-size=500MByml 写法 spring: servlet: multipart: max-file-size: 500MB max-request-size: 500MB 三次修改 关于返回路径的问题原来是 调用了ossClient.generatePresignedUrl返回了一个地址,后来发现阿里提供了访问的方法,如果文件的读写权限ACL为公共读,即该文件允许匿名访问,那么文件URL的格式为https://BucketName.Endpoint/ObjectName 所以只需要修改一下返回值即可 原文连接. |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |