0


spring boot文件上传

文件上传

简介

文件上传,是指将本地图片、视频、音频等文件上传到服务器,供其他用户浏览或下载的过程。
文件上传在项目中应用非常广泛,我们经常发微博、发微信朋友圈都用到了文件上传功能。

本地存储

前端代码:

<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>
代码编写
  1. 编写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();}}
  1. 相关配置
  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
  1. 读取配置文件
@Component
@ConfigurationProperties(prefix = "sky.alioss")
@Data
public class AliOssProperties {

    private String endpoint;
    private String accessKeyId;
    private String accessKeySecret;
    private String bucketName;

}
  1. 给属性赋值,并创建对象
/**
 * 配置类,用于创建AliOssUtil对象
 */@Configuration@Slf4jpublicclassOssConfiguration{@BeanpublicAliOssUtilaliOssUtil(AliOssProperties aliOssProperties){
        log.info("开始创建阿里云文件上传工具类对象:{}",aliOssProperties);returnnewAliOssUtil(aliOssProperties.getEndpoint(),
                aliOssProperties.getAccessKeyId(),
                aliOssProperties.getAccessKeySecret(),
                aliOssProperties.getBucketName());}}
  1. 编写上传文件接口
@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.. 所有, 如有侵权,请联系我们删除。

“spring boot文件上传”的评论:

还没有评论