Java从阿里云oss操作文件的最简单用法

1.后端

1.创建一个有关阿里云oss操作的工具类AliYunOSS

package com.edu.mju.backend.config.utils;

import com.aliyun.oss.*;
import com.aliyun.oss.model.GetObjectRequest;
import org.apache.commons.io.FilenameUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

// 上传文件的工具类

public class AliYunOSS {
    //1.阿里云 oss域名
    public static final String ALI_DOMAIN = "";
    //2.地域节点 密钥
    public static final String endPoint = "https://oss-cn-shanghai.aliyuncs.com";
    public static final String accessKeyID = "";
    public static final String accessKeySecret = "";
    // 3.OSS客户端对象
    public static OSS ossClient = null;

    // 1.上传
    public static Map<String, String> uploadRemote(MultipartFile file) throws IOException {

        // 新建连接池
        ossClient = new OSSClientBuilder().build(endPoint, accessKeyID, accessKeySecret);

        Map<String, String> resp = new HashMap<>();

        // 1.生成新文件名 防止文件名冲突
        String originalFileName = file.getOriginalFilename();
        // ext:.和该文件扩展名
        String ext = "." + FilenameUtils.getExtension(originalFileName);
        // 将 -变成 "'
        String uuid = UUID.randomUUID().toString().replace("-", "");
        String fileName = uuid + ext;


        // putObject(仓库名,文件名,文件。getInputStream):将文件上传到云
        ossClient.putObject("", fileName, file.getInputStream());
        ossClient.shutdown(); // 关闭阿里云 oss仓库

        resp.put("path", ALI_DOMAIN + fileName); // 返回url
        resp.put("error_message", "success");
        return resp;
    }

    // romoteUrl:存储在云端的不包含Bucket的想要下载的文件路径名,不能以正斜线(/)或者反斜线(\)开头
    // 2.下载
    public static Map<String, String> DownloadRemote(MultipartFile file) throws IOException {

        // 新建连接池子
        ossClient = new OSSClientBuilder().build(endPoint, accessKeyID, accessKeySecret);

        Map<String, String> resp = new HashMap<>();
        String bucketName = "";  // oss名称

        String remoteUrl = file.getOriginalFilename();

        // 下载object到本地文件夹  C:\Users\hasee\Downloads\ 下
        String localUrl = "C:\\Users\\hasee\\Downloads\\" + remoteUrl; // 下载到本地的路径名 =  要放的位置 + 远程文件名
        //ossClient.getObject(new GetObjectRequest(bucketName, 不包含bucket的文件路径名),new File(localUrl))
        ossClient.getObject(new GetObjectRequest(bucketName, remoteUrl), new File(localUrl));

        // 用完关闭池子
        ossClient.shutdown();
        resp.put("error_message", "success");
        return resp;
    }
}



2.controller调用工具类即可

   @PostMapping("/user/account/upload")
    public Map<String,String> upload(@RequestParam("file") MultipartFile file) throws IOException {
        String contentType = file.getContentType();
        Map<String,String> res = new HashMap<>();

        // 只支持JPG和PNG格式
        if (!contentType.equals("image/jpeg") && !contentType.equals("image/png")) {
            res.put("error_message","只允许上传 JPG 或 PNG 格式的图片文件");
            return res;
        }
        // 文件上传到云端
        return AliYunOSS.uploadRemote(file);
    }

2.前端调用controller

const upload_photo = () => {

            // 1.获得文件的input标签
            const fileInput = document.getElementById('fileInput');

            // 2.获得文件的对象
            const file = fileInput.files[0];
            if (!file) {
                error_message.value = "请选择一个文件";
                return;
            }

            // 3.将文件对象转化为可以传输的formData
            const formData = new FormData();
            formData.append('file', file);
            // 4.传文件给后端
            $.ajax({
                url: "http://127.0.0.1:9090/user/account/upload",
                type: "post",
                data: formData,
                processData: false, // 必须禁用JQuery处理数据
                contentType: false, // 必须禁用JQuery设置content-type
                headers: {
                    Authorization: "Bearer " + store.state.user.token,
                },
                success(resp) {
                    error_message.value = "";
                    if (resp.error_message === "success") {
                        show_modal('upload-success');   
                        photo.value = resp.path;
                    } else {
                        error_message.value = resp.error_message;
                    }
                }, error() {
                    // console.log(resp);
                }
            });
        };
  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值