java上传图片到阿里云OSS对象存储
之前项目的图片是上传后保存在本地E盘的,在本地运行的时候简直完美,但等到用内网穿透访问或部署到服务器上后再访问,那1M的小水管要加载半天才能加载出来图片。原本无可奈何,结果突然发现买服务器时送了6个月的40G OSS存储包,这不是美滋滋吗,赶紧把之前的图片上传进去,然后把数据库里的路径全部加上OSS域名,再一试,速度飞起。结果我发现事情没这么简单,存储包是送的,但是流量要钱的[哭]。但是数据库里路径都改了,虽然有备份,但是用OSS来访问那个速度让我不想放弃。于是用了一会儿看了看价格。访问我的项目全部页面3次,虽然流量70多Mb,但是才一分钱。本穷逼可以接受。
那就把文件上传接口改了吧。由于我只需要将图片上传到OSS,并不需要做其他删除等操作,所以还是比较简单的。
首先导入依赖
<!--阿里上传文件到OSS存储依赖--> <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.8.0</version> </dependency>
上传图片请求
@RestController public class FileControllerToOSS { @PostMapping({"/upLoadImg/{type}"}) public JSONObject upLoadImg(@RequestParam("file") MultipartFile file, @PathVariable("type") String type) throws Exception{ if (!CheckSession.checkSession()){ JSONObject jsonObject = new JSONObject(); jsonObject.put("code",1); return jsonObject; } else { /*获取当前登录的用户id*/ Integer userId = GetUserId.getUserId(); String fileName = file.getOriginalFilename(); //获取原始路径 fileName = fileName.substring(fileName.lastIndexOf("\") + 1); //获取文件&后缀名 String suffixName = fileName.substring(fileName.lastIndexOf(".")); //获取后缀名 String name = userId + Now.getNowTime("yyyyMMddHHmmss")+fileName; String completePath = "userImages/"+ type+"/" + name; // Endpoint以杭州为例,其它Region请按实际情况填写。 String endpoint = "http://oss-cn-hangzhou.aliyuncs.com"; // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。 String accessKeyId = ""; String accessKeySecret = ""; InputStream inputStream = file.getInputStream(); // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // 创建PutObjectRequest对象。 // PutObjectRequest putObjectRequest = new PutObjectRequest("", "", new File("")); // 如果需要上传时设置存储类型与访问权限,请参考以下示例代码。 // ObjectMetadata metadata = new ObjectMetadata(); // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString()); // metadata.setObjectAcl(CannedAccessControlList.Private); // putObjectRequest.setMetadata(metadata); // 上传文件。 ossClient.putObject("", completePath, inputStream); // 关闭OSSClient。 ossClient.shutdown(); String src = ""+completePath; JSONObject srcJson = new JSONObject(); srcJson.put("src",src); JSONObject json = new JSONObject(); json.put("code",0); json.put("msg","上传成功"); json.put("data",srcJson); // System.out.println(json); return json; } } }
官方的文档已经比较详细,这里我将自己的那些key和url等删除了,按照官方的填入自己的即可
上一篇:
IDEA上Java项目控制台中文乱码