当前位置: 首页 > news >正文

文件上传阿里云OSS以及本地图片服务器搭建

目录

  • 一、阿里云OSS准备工作
  • 二、SpringBoot项目阿里云OSS上传配置
  • 三、SSM项目阿里云OSS上传配置
  • 四、本地文件服务器搭建以及文件上传

一、阿里云OSS准备工作

登录阿里云官网,开通对象存储OSS。阿里云
在这里插入图片描述
阿里云OSS的官网:阿里云OSS官网
在这里插入图片描述
在这里插入图片描述
创建Bucket实例
在这里插入图片描述
按照下面的操作创建实例:
在这里插入图片描述
在这里插入图片描述
获取AccessKey
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
点击创建AccessKey,出现下面页面,需要进行认证
在这里插入图片描述
在这里插入图片描述
按照如下方式;安装SDK。
在这里插入图片描述
在这里插入图片描述
要求jdk在7以上
在这里插入图片描述
maven依赖:

<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.17.4</version>
</dependency>

如果使用的是Java 9及以上的版本,则需要添加以下JAXB相关依赖。

<dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>2.3.1</version>
</dependency>
<dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>1.1.1</version>
</dependency>
<!-- no more than 2.3.3-->
<dependency><groupId>org.glassfish.jaxb</groupId><artifactId>jaxb-runtime</artifactId><version>2.3.3</version>
</dependency>

二、SpringBoot项目阿里云OSS上传配置

在创建的SpringBoot当中进行阿里云OSS的配置,之后导入接口就可以使用。
在这里插入图片描述
在这里插入图片描述
导入两个工具类:
在这里插入图片描述
AliyunOSSOperator里的内容如下:

package com.qcby.util;import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.common.auth.DefaultCredentialProvider;
import com.aliyun.oss.common.comm.SignVersion;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import java.io.ByteArrayInputStream;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.UUID;@Component
public class AliyunOSSOperator {@Autowiredprivate AliyunOSSProperties aliyunOSSProperties;public String upload(byte[] content, String originalFilename) {String endpoint = aliyunOSSProperties.getEndpoint();String bucketName = aliyunOSSProperties.getBucketName();String region = aliyunOSSProperties.getRegion();String accessKeyId = aliyunOSSProperties.getAccessKeyId();String accessKeySecret = aliyunOSSProperties.getAccessKeySecret();// 生成存储路径:yyyy/MM/uuid.扩展名String dir = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy/MM"));String newFileName = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));String objectName = dir + "/" + newFileName;// 使用 DefaultCredentialProvider 直接传入 AK/SKDefaultCredentialProvider credentialProvider = new DefaultCredentialProvider(accessKeyId, accessKeySecret);// 配置 OSS Client(可选,如启用 V4 签名)ClientBuilderConfiguration clientConfig = new ClientBuilderConfiguration();clientConfig.setSignatureVersion(SignVersion.V4);// 创建 OSSClient 实例OSS ossClient = OSSClientBuilder.create().endpoint(endpoint).credentialsProvider(credentialProvider)  // 使用 AK/SK 凭证.clientConfiguration(clientConfig).region(region).build();try {// 上传文件ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content));// 返回文件的访问 URL(如:https://bucket.endpoint/objectName)return endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + objectName;} finally {ossClient.shutdown();  // 关闭 OSSClient}}
}

AliyunOSSProperties内容文件如下:

package com.qcby.util;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@ConfigurationProperties(prefix = "aliyun.oss")
public class AliyunOSSProperties {private String endpoint;private String bucketName;private String region;private String accessKeyId;private String accessKeySecret;public String getEndpoint() {return endpoint;}public void setEndpoint(String endpoint) {this.endpoint = endpoint;}public String getBucketName() {return bucketName;}public void setBucketName(String bucketName) {this.bucketName = bucketName;}public String getRegion() {return region;}public void setRegion(String region) {this.region = region;}public String getAccessKeyId() {return accessKeyId;}public void setAccessKeyId(String accessKeyId) {this.accessKeyId = accessKeyId;}public String getAccessKeySecret() {return accessKeySecret;}public void setAccessKeySecret(String accessKeySecret) {this.accessKeySecret = accessKeySecret;}
}

通过这两个类就可以将图片文件等上传到阿里云OSS当中。
上传接口:

package com.qcby.controller;import com.qcby.entity.Result;
import com.qcby.util.AliyunOSSOperator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
//上传接口
@Controller
public class UploadController {@Autowiredprivate AliyunOSSOperator aliyunOSSOperator;@RequestMapping("/upload")@ResponseBodypublic Result uploadFile(MultipartFile file) throws Exception {String originalFilename = file.getOriginalFilename();byte[] bytes = file.getBytes();String url = aliyunOSSOperator.upload(bytes,originalFilename);return new Result().success(url);}
}

三、SSM项目阿里云OSS上传配置

在SSM项目中需要在SpringMvc.xml加入一些配置,配置如下,加入org.springframework.web.multipart.commons.CommonsMultipartResolve

 <!-- 配置MultipartResolver用于文件上传 --><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!-- 上传文件最大大小,10MB --><property name="maxUploadSize" value="10485760"/><!-- 上传文件单个最大大小,10MB --><property name="maxUploadSizePerFile" value="10485760"/><!-- 内存中最大尺寸,2MB --><property name="maxInMemorySize" value="2097152"/><!-- 默认编码 --><property name="defaultEncoding" value="UTF-8"/><!-- 解析请求的延迟时间 --><property name="resolveLazily" value="true"/></bean>

同时需要在web.xml当中的dispatcher配置中加入

    <multipart-config><max-file-size>10485760</max-file-size>      <!-- 10MB --><max-request-size>10485760</max-request-size> <!-- 10MB --><file-size-threshold>2097152</file-size-threshold> <!-- 2MB --></multipart-config>

则dispatcher中的所有配置如下:

<servlet><servlet-name>dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><load-on-startup>1</load-on-startup><!-- 添加multipart配置 --><multipart-config><max-file-size>10485760</max-file-size>      <!-- 10MB --><max-request-size>10485760</max-request-size> <!-- 10MB --><file-size-threshold>2097152</file-size-threshold> <!-- 2MB --></multipart-config></servlet>

同时AliyunOSSProperties类需要做如下修改:

package com.qcby.util;import org.springframework.stereotype.Component;@Component
public class AliyunOSSProperties {private String endpoint="https://oss-cn-beijing.aliyuncs.com";private String bucketName="lyf-java-ai";private String region="cn-beijing";private String accessKeyId="LTAI5tJJea7CiJc8Y9EKWyMB";private String accessKeySecret="GkqCMu69g77NzWoTcD1S5UB2yFAEvV";public String getEndpoint() {return endpoint;}public void setEndpoint(String endpoint) {this.endpoint = endpoint;}public String getBucketName() {return bucketName;}public void setBucketName(String bucketName) {this.bucketName = bucketName;}public String getRegion() {return region;}public void setRegion(String region) {this.region = region;}public String getAccessKeyId() {return accessKeyId;}public void setAccessKeyId(String accessKeyId) {this.accessKeyId = accessKeyId;}public String getAccessKeySecret() {return accessKeySecret;}public void setAccessKeySecret(String accessKeySecret) {this.accessKeySecret = accessKeySecret;}
}

四、本地文件服务器搭建以及文件上传

本地文件服务器需要利用到Tomcat,需要将Tomcat设置为可以上传的模式。
修改conf里面的web.xml文件,将项目的只读关闭。
在这里插入图片描述

    <servlet><servlet-name>default</servlet-name><servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class><init-param><param-name>debug</param-name><param-value>0</param-value></init-param><init-param><param-name>readonly</param-name><param-value>false</param-value></init-param><init-param><param-name>listings</param-name><param-value>false</param-value></init-param><load-on-startup>1</load-on-startup></servlet>

文件上传的接口如下:

package com.example.controller;import com.alibaba.fastjson.JSONObject;
import com.example.util.PropReader;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.UUID;@Controller
@RequestMapping("/upload")
public class UploadController {@RequestMapping("/uploadFile")public void uploadFile(HttpServletRequest request, HttpServletResponse response, String lastImage, @RequestParam(value = "fileType") String type) throws IOException {System.out.println(type+"类型是 dasdasd");//把Request做强制转换MultipartHttpServletRequest mr = (MultipartHttpServletRequest) request;Map<String, MultipartFile> fileMap = mr.getFileMap();Set<String> keySet = fileMap.keySet();Iterator<String> iterator = keySet.iterator();String key = iterator.next();//获得到上传的文件MultipartFile multipartFile = fileMap.get(key);byte[] bytes = multipartFile.getBytes();//获得文件的原始文件名String originalFilename = multipartFile.getOriginalFilename();String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));String fileName = UUID.randomUUID().toString();fileName = fileName + suffix;//创建jersy的客户端Client client = Client.create();//删除老图片if(StringUtils.isNotBlank(lastImage)){WebResource resource1 = client.resource(lastImage);resource1.delete();}//resource的参数文件服务器上的文件的绝对路径WebResource resource = client.resource(PropReader.read("filePath")+"/"+type+"/"+fileName);resource.put(bytes);JSONObject jo = new JSONObject();String realPath = PropReader.read("filePath")+"/"+type+"/"+fileName;String relativePath = "/"+type+"/"+fileName;jo.put("realPath", realPath);jo.put("relativePath", relativePath);System.out.println("真实的路径"+realPath);System.out.println("相对的路径"+relativePath);response.getWriter().write(jo.toString());}@RequestMapping("/uploadFileMp3")public void uploadFileMp3(HttpServletRequest request, HttpServletResponse response, String lastMp3, String fileType) throws IOException {System.out.println(lastMp3);//把Request做强制转换MultipartHttpServletRequest mr = (MultipartHttpServletRequest) request;Map<String, MultipartFile> fileMap = mr.getFileMap();Set<String> keySet = fileMap.keySet();Iterator<String> iterator = keySet.iterator();String key = iterator.next();//获得到上传的文件MultipartFile multipartFile = fileMap.get(key);byte[] bytes = multipartFile.getBytes();//获得文件的原始文件名String originalFilename = multipartFile.getOriginalFilename();String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));String fileName = UUID.randomUUID().toString();fileName = fileName + suffix;//创建jersy的客户端Client client = Client.create();//删除老音频if(StringUtils.isNotBlank(lastMp3)){System.out.println(lastMp3);WebResource resource1 = client.resource(lastMp3);resource1.delete();}//resource的参数文件服务器上的文件的绝对路径WebResource resource = client.resource(PropReader.read("filePath")+"/"+fileType+"/"+fileName);resource.put(bytes);JSONObject jo = new JSONObject();jo.put("realPath", PropReader.read("filePath")+"/"+fileType+"/"+fileName);jo.put("relativePath", "/"+fileType+"/"+fileName);response.getWriter().write(jo.toString());}
}
http://www.dtcms.com/a/482871.html

相关文章:

  • 企业网站建设需注意什么商务网站管理与建设
  • 威县做网站哪儿好个人网站建设的背景
  • Excel导出报Can not find ‘Converter‘ support class Map.
  • Linux osq_lock
  • SSM共享汽车管理系统300fw(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • Docker安装部署FileBrowser
  • 基于单片机频率周期脉宽测量系统Proteus仿真(含全部资料)
  • wap网站制作模板电影网站开发api
  • xss-labs通关(2)
  • 前后端分离项目前端页面开发远程调试代理解决跨域问题方法
  • 商城网站都有哪 些功能企业网站搭建方案
  • AI让404变品牌秀场:用提示词秒生成个性化错误文案
  • [2025.10.14]Win11.25H2企业版26220.6780深度精简优化 PIIS出品 1.9GB
  • Python路径操作革命:拥抱pathlib
  • 逻辑学是什么浅谈
  • 在阿里巴巴上做网站要多少钱阿里巴巴网站官网
  • 在 orin 上 安装了 miniconda 如何使用 orin 内置的 opencv
  • keil工具详细入门教学
  • 招聘网站开发方案doc蒸丞文化传媒有限公司网页设计
  • Linux中NUMA节点初始化内存相关参数的实现
  • [Backstage] 后端服务 | 示例插件
  • 黑马商城day2-Docker
  • 赤水市住房和城乡建设局网站网站建设费专票会计分录
  • 前端页面权限管控-高阶组件
  • 什么是脚本语言?
  • AI智能体
  • 企业准备扩大规模时,如何选择第三方物流(3PL)合作伙伴
  • 阮一峰《TypeScript 教程》学习笔记——简介
  • Scope作用域
  • 网页设计网站名字上海企业电话查询