基于spring+vue把图片文件上传至阿里云oss容器并回显

前端

<el-upload class="avatar-uploader" action="/api/upload/avatar" :show-file-list="false"

:on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload" :headers="uploadHeaders"

:data="uploadData">

<el-button size="small" type="primary" icon="el-icon-camera">更换头像</el-button>

</el-upload>

属性解释

action="/api/upload/avatar" 点击文件后这个组件会自动发送/api/upload/avatar请求

:on-success="handleAvatarSuccess" 上传成功后调用的方法

:before-upload="beforeAvatarUpload" 上传前调用的方法

:headers="uploadHeaders" 请求头的设置

:data="uploadData" 请求携带除file外别的参数

后端

oss工具类

复制代码
public class ossUtil {

    // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
    final static String ENDPOINT = "https://oss-cn-hangzhou.aliyuncs.com";

    final static String OSS_ACCESS_KEY_ID = "********";

    final static String OSS_ACCESS_KEY_SECRET = "********";

    // 填写Bucket名称,例如examplebucket。
    final static String BUCKNAME = "campus-knowledge-payment";
    // 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。
    final static String REGION = "cn-hangzhou";


    public static String uploadFile(String objectName, InputStream in) throws FileNotFoundException {


// 创建CredentialsProvider
        CredentialsProvider credentialsProvider = new DefaultCredentialProvider(OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET);


        // 创建OSSClient实例。
        // 当OSSClient实例不再使用时,调用shutdown方法以释放资源。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(ENDPOINT)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(REGION)
                .build();
        String url = "";

        try {
            // 填写字符串。
            String content = "Hello OSS,你好世界";

            // 创建PutObjectRequest对象。
            PutObjectRequest putObjectRequest = new PutObjectRequest(BUCKNAME, objectName, in);

            // 如果需要上传时设置存储类型和访问权限,请参考以下示例代码。
            // ObjectMetadata metadata = new ObjectMetadata();
            // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
            // metadata.setObjectAcl(CannedAccessControlList.Private);
            // putObjectRequest.setMetadata(metadata);

            // 上传字符串。
            PutObjectResult result = ossClient.putObject(putObjectRequest);
            url = "https://" + BUCKNAME +"."+ ENDPOINT.substring(ENDPOINT.lastIndexOf("/") + 1) + "/" + objectName;
            return url;
        } 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();
            }
        }
        return url;
    }
}

这里

复制代码
ENDPOINT
复制代码
OSS_ACCESS_KEY_ID
复制代码
OSS_ACCESS_KEY_SECRET
复制代码
BUCKNAME
复制代码
REGION

要根据自己创建的oss bucket

controller类

复制代码
@PostMapping("/avatar")
public Result<String> upload(@RequestParam("file") MultipartFile file,
                             @RequestParam("userId") Integer userId) throws IOException {
    log.info("图片上传");
    String originalFilename = file.getOriginalFilename();
    String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));
    String url = ossUtil.uploadFile(fileName, file.getInputStream());
 
    return Result.success(url);
}
相关推荐
悟能不能悟几秒前
java 判断string[]中是否有a
java·开发语言
4***1490几秒前
高并发时代的“确定性”挑战——为何稳定性正在成为 JVM 的下一场核心竞争?
java·开发语言·jvm
野蛮人6号13 分钟前
黑马微服务p10mybatisplus09核心功能iservice 测试文档无法正常打开
java·黑马微服务
危险、14 分钟前
《Java Stream 中 toMap 的生产级用法:一次 Duplicate key 的异常问题复盘》
java
古城小栈19 分钟前
Java 内存优化:JDK 22 ZGC 垃圾收集器调优
java·python·算法
福大大架构师每日一题22 分钟前
rust 1.92.0 更新详解:语言特性增强、编译器优化与全新稳定API
java·javascript·rust
仰望.23 分钟前
vue 甘特图 vxe-gantt table 拖拽任务调整开始日期和结束日期的使用,拖拽任务调整日期
vue.js·甘特图·vxe-ui
阿懂在掘金24 分钟前
早点下班:在 Vue3 中少写 40%+ 的异步代码
vue.js
xiaogc_a26 分钟前
【无标题】
java
源码技术栈32 分钟前
智慧工地微服务架构+Java+Spring Cloud +Uni-App +MySql开发,在微信公众号、小程序、H5、移动端
java·ai·saas·智慧工地·智慧工地项目·可视化大屏·智慧工地系统