文件上传
简介
文件上传,是指将本地图片、视频、音频等文件上传到服务器,供其他用户浏览或下载的过程。
文件上传在项目中应用非常广泛,我们经常发微博、发微信朋友圈都用到了文件上传功能。
本地存储
前端代码:
<formaction="/upload"method="post"enctype="multipart/form-data">
头像:<inputtype="file"name="image"><br><inputtype="submit"value="提交"></form>
后端代码:
@PostMapping("/upload")@ApiOperation("文件上传")publicResult<String>upload(MultipartFile file){
log.info("文件上传:{}",file);// 原始文件名String originalFilename = file.getOriginalFilename();// 后缀名String extension = originalFilename.substring(originalFilename.lastIndexOf("."));// 构造新文件名称String fileName =UUID.randomUUID().toString()+extension;// 将文件存储到服务器的磁盘目录中
file.transferTo(newFile("E:\\Vue\\imgs"+fileName));returnResult.success();
阿里云OSS对象存储
对于阿里云的oss的使用可阅读对象存储 OSS官方文档
导入依赖
<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.15.1</version></dependency>
如果使用的是Java 9及以上的版本,则需要添加jaxb相关依赖。添加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>
代码编写
- 编写AliOssUtil工具类用作上传
@Data@AllArgsConstructor@Slf4jpublicclassAliOssUtil{privateString endpoint;privateString accessKeyId;privateString accessKeySecret;privateString bucketName;/**
* 文件上传
*
* @param bytes
* @param objectName
* @return
*/publicStringupload(byte[] bytes,String objectName){// 创建OSSClient实例。OSS ossClient =newOSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);try{// 创建PutObject请求。
ossClient.putObject(bucketName, objectName,newByteArrayInputStream(bytes));}catch(OSSException oe){System.out.println("Caught an OSSException, which means your request made it to OSS, "+"but was rejected with an error response for some reason.");System.out.println("Error Message:"+ oe.getErrorMessage());System.out.println("Error Code:"+ oe.getErrorCode());System.out.println("Request ID:"+ oe.getRequestId());System.out.println("Host ID:"+ oe.getHostId());}catch(ClientException ce){System.out.println("Caught an ClientException, which means the client encountered "+"a serious internal problem while trying to communicate with OSS, "+"such as not being able to access the network.");System.out.println("Error Message:"+ ce.getMessage());}finally{if(ossClient !=null){
ossClient.shutdown();}}//文件访问路径规则 https://BucketName.Endpoint/ObjectNameStringBuilder stringBuilder =newStringBuilder("https://");
stringBuilder
.append(bucketName).append(".").append(endpoint).append("/").append(objectName);
log.info("文件上传到:{}", stringBuilder.toString());return stringBuilder.toString();}}
- 相关配置
alioss:
endpoint: oss-cn-hangzhou.aliyuncs.com
access-key-id: your-access-key-id
access-key-secret: your-access-key-secret
bucket-name: your-bucket-name
- 读取配置文件
@Component
@ConfigurationProperties(prefix = "sky.alioss")
@Data
public class AliOssProperties {
private String endpoint;
private String accessKeyId;
private String accessKeySecret;
private String bucketName;
}
- 给属性赋值,并创建对象
/**
* 配置类,用于创建AliOssUtil对象
*/@Configuration@Slf4jpublicclassOssConfiguration{@BeanpublicAliOssUtilaliOssUtil(AliOssProperties aliOssProperties){
log.info("开始创建阿里云文件上传工具类对象:{}",aliOssProperties);returnnewAliOssUtil(aliOssProperties.getEndpoint(),
aliOssProperties.getAccessKeyId(),
aliOssProperties.getAccessKeySecret(),
aliOssProperties.getBucketName());}}
- 编写上传文件接口
@Autowired
private AliOssUtil aliOssUtil;
@PostMapping("/upload")
@ApiOperation("文件上传")
public Result<String> upload(MultipartFile file){
log.info("文件上传:{}",file);
try {
// 原始文件名
String originalFilename = file.getOriginalFilename();
// 后缀名
String extension = originalFilename.substring(originalFilename.lastIndexOf("."));
// 构造新文件名称
String fileName = UUID.randomUUID().toString()+extension;
// 文件的请求路径
String filePath = aliOssUtil.upload(file.getBytes(), fileName);
// 返回请求路径用于回显图片
return Result.success(filePath);
} catch (IOException e) {
log.error("文件上传失败:{}",e);
}
return null;
}
标签:
java
spring boot
本文转载自: https://blog.csdn.net/asd20200319/article/details/131988277
版权归原作者 Mark.. 所有, 如有侵权,请联系我们删除。
版权归原作者 Mark.. 所有, 如有侵权,请联系我们删除。