首页 > 其他分享 >实现 文件上传【头像/图片】

实现 文件上传【头像/图片】

时间:2024-08-23 16:50:22浏览次数:5  
标签:文件 String System private 头像 println 上传 图片

实现 文件上传【头像/图片】

浏览器---->后端服务----->阿里云OSS

工具类

@Data
@AllArgsConstructor
@Slf4j
public class AliOssUtil {

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

    /**
     * 文件上传
     *
     * @param bytes
     * @param objectName
     * @return
     */
    public String upload(byte[] bytes, String objectName) {

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        try {
            // 创建PutObject请求。
            ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(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/ObjectName
        StringBuilder stringBuilder = new StringBuilder("https://");
        stringBuilder
                .append(bucketName)
                .append(".")
                .append(endpoint)
                .append("/")
                .append(objectName);

        log.info("文件上传到:{}", stringBuilder.toString());

        return stringBuilder.toString();
    }
}

代码实现

  1. 在application.yml中编写相关信息

    sky:
      alioss:
        endpoint: oss-cn-hangzhou.aliyuncs.com
        access-key-id: LTAI5tJKk5H21ZmQQ9CgeG8y
        access-key-secret: 90xHhXxKqg6LNnbb4ubp1BeIdw7RAT
        bucket-name: sky-zy2596
    
  2. 编写AliOssProperties ,将yml文件信息映射到AliOssProperties对象中

    @Component
    @ConfigurationProperties(prefix = "sky.alioss")
    @Data
    public class AliOssProperties {
    
        private String endpoint;
        private String accessKeyId;
        private String accessKeySecret;
        private String bucketName;
    
    }
    
  3. 编写配置类,创建AliOssUtil对象

    /**
     * 配置类,用于创建AliOssUtil对象
     */
    @Configuration
    @Slf4j
    public class OssConfiguration {
    
        @Bean
        @ConditionalOnMissingBean//保证spring容器只有一个AliOssUtil对象
        public AliOssUtil aliOssUtil(AliOssProperties aliOssProperties ){//将aliOssProperties 中的属性赋给AliOssUtil对象
            log.info("开始创建阿里云文件上传工具类对象:{}",aliOssProperties);
            return new AliOssUtil(aliOssProperties.getEndpoint()
                    ,aliOssProperties.getAccessKeyId()
                    ,aliOssProperties.getAccessKeySecret()
                    ,aliOssProperties.getBucketName());
    
        }
    }
    
  4. 编写文件上传接口

    @PostMapping("/upload")
    @ApiOperation("文件上传")
    public Result<String> upload(MultipartFile file){// file 这里的参数名必须和前端提交的参数名保持一致
        log.info("文件上传:{}",file);
        try {
            //原始文件名
            String originalFilename = file.getOriginalFilename();
            //截取原始文件名的后缀
            String extension = originalFilename.substring(originalFilename.lastIndexOf("."));
            //构造新文件名称
            String objectName = UUID.randomUUID().toString() + extension;
            //文件的请求路径
            String filePath = aliOssUtil.upload(file.getBytes(), objectName);
            return Result.success(filePath);
    
        } catch (IOException e) {
            log.error("文件上传失败:{}",e);
        }
           return Result.error("文件上传失败");
    }
    

标签:文件,String,System,private,头像,println,上传,图片
From: https://www.cnblogs.com/zydevelop/p/18376390/zy_upload

相关文章

  • Java 调用电脑中安装的tesseract.exe进行图片中的文本方向识别
    StringimagePath="测试图片完整地址";StringtesseractPath="Tesseract安装路径\\tesseract.exe";ProcessBuilderprocessBuilder=newProcessBuilder(tesseractPath,imagePath,"stdout","--......
  • gif图片怎么压缩大小?深度测评7款动图压缩工具(内含教程)
    gif图片在社交媒体和网络上非常流行,深受大家喜爱,因为它可以呈现生动的动画效果。gif动图之所以受到欢迎,主要因为其出色的压缩算法,能有效存储多个帧,从而实现流畅的动画。然而,大多数社交媒体平台对gif图片的上传文件大小都有一定的限制。为了确保gif动图能快速加载并优化带宽,在......
  • JS WEB 实现文件夹上传(保留目录结构)
    最近这块好像挻火的,今天早上又有一位网友加我微信,也是想了解这块的技术和方案,实际上我的微信之前就已经在网上公开了,但是论坛里面很多网友还是不知道。昨天晚上论坛里面有一个网友发私信给我,想和我探讨一下这方面的技术问题,他是刚开始接触这块,以前没怎么接触过,都是做的后端......
  • JAVA实现文件分片上传、大文件秒传
    该说不说,最近这块挻火的。今天早上有网友加我微信,也是咨询这块的技术问题,最近不知道啥情况,加我的网友还是挻多的。实际上我的微信很早就在网上公开了,但是还是有很多网友说找不到。昨天晚上论坛里面有位网友发私信给我,聊了一下这个问题,这个网友是一个自由职业者,他也是刚开始......
  • 基础组件:图片
    Flutter中,我们可以通过Image组件来加载并显示图片,Image的数据源可以是asset、文件、内存以及网络。ImageProviderImageProvider是一个抽象类,主要定义了图片数据获取的接口load(),从不同的数据源获取图片需要实现不同的ImageProvider,如AssetImage是实现了从Asset中加载图片的I......
  • 爬虫案例1-爬取图片的三种方式之一:DrissionPage篇(3)
    @目录前言DrissionPage介绍实战共勉博客前言继requests篇和selenium篇,本文是爬取图片的最后一个案例,利用了python第三方库DrissionPage来自动化爬取图片。当然,爬取图片肯定不止这三种方法,还有基于python的scrapy框架,基于node.js的express框架以及基于Java的webmagic框架等等。D......
  • 织梦dedecms上传服务器后数据连接失败怎么办
    当织梦DeDeCMS上传到服务器后出现数据连接失败的问题时,可以采取以下几个步骤来解决这个问题:1.检查数据库连接信息打开common.inc.php文件:在织梦CMS的 data 文件夹中找到 common.inc.php 文件。修改数据库连接信息:数据库服务器地址:确认数据库服务器地址是否正确,例如使用......
  • 一刻工具箱:淘宝API上货神器,支持多平台,错类目上传,上货不黑屋
    图片:椰子作者:yezic01一刻工具箱:电商卖家的得力助手在电商运营中,上货效率和准确性直接影响店铺的销量和用户体验。为了帮助卖家更好地管理商品,一刻工具箱应运而生。这款软件不仅支持多平台上传,还能避免爬虫违规,是电商卖家的得力助手。多平台支持:淘宝、抖音、天猫全搞定一刻......
  • IIS网站图片不能加载
    去掉<addname="misson"path="*"verb="*"modules="IsapiModule"scriptProcessor="C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll"resourceType="File"requireAccess="None&......
  • nextjs 客户端图片 因跨域 strict-origin-when-cross-origin 无法展示
    使用next.config.js配置跨域规则Next.js提供了一个配置文件next.config.js,你可以在其中配置images选项,以允许跨域加载图片。在Next.js中,remotePatterns配置用于定义允许加载远程图像的域名及路径。不过,remotePatterns并不支持传统的正则表达式,而是使用类似正则表达式......