上传文件- 阿里云oss对象存储

该博客详细介绍了如何在Java应用中集成阿里云OSS对象存储服务,包括添加依赖、配置访问凭证、上传文件及验证文件格式等步骤。通过示例代码展示了上传文件到阿里云OSS的完整流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上传文件- 阿里云oss对象存储

阿里云开通对象存储步骤不多介绍, 网上都有教程

直接上代码

引入pom文件

<!--阿里云oss对象存储-->
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.10.2</version>
        </dependency>
@RestController
@RequestMapping("file")
public class SignController {

    @Autowired
    OSSClientManager ossClientManager;

    //Endpoint(地域节点)
    private final static String ENDPOINT = "oss-cn-beijing.aliyuncs.com";
    //accessKey
    private final static String ACCESS_KEY_ID = "XXXXXXXXXXXXXX";
    //secretKey
    private final static String ACCESS_KEY_SECRET = "XXXXXXXXXXXXXX";
    // Bucket 域名
    private static final String OUTURL = "shkdev.oss-cn-beijing.aliyuncs.com";

    //Bucket名称 (Bucket 命名规范:1)只能包括小写字母,数字和短横线(-);2)必须以小写字母或者数字开头;3)长度必须在 3-63 字节之间。)
    private static final String BUCKET_NAME = "shkdev";


    @RequestMapping(value = "", method = RequestMethod.POST)
    public IMGResponseInfo uploader(@RequestParam("file") MultipartFile[] files, HttpServletRequest request, HttpServletResponse response) {

        // 定义上传路径
        String pathHttp = "";
        String fileName = "", fileExtend = "";

        try {
            String app = request.getParameter("app");
            String AllowFileType = ".xls|.xlsx|.doc|.docx|.ppt|.pptx|.zip|.rar|.7z|.jpg|.jpeg|.gif|.bmp|.png|.eml|.dwg|.dwt|.dws|.dwf|.pdf|.txt|.swf|.mp4|.vsd|.vsdx|.txt|.jpeg";
            long AllowFileLength = 1024 * 1024 * 300; // 上传上限为300M

            String resultURL;
            for (MultipartFile file : files) {

                fileExtend = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")).toLowerCase();
                fileName = MakeFileName() + fileExtend;

                if (!FileValidate(fileExtend, AllowFileType)) {
                    return new IMGResponseInfo().error("错误的文件格式!");	// error_filetype
                }
                if (file.getSize() > AllowFileLength) {
                    return new IMGResponseInfo().error("文件最大为300M!");	// error_exceedlimit
                }

                String datadirectory = new java.text.SimpleDateFormat("yyyy/MM/dd").format(new java.util.Date()) + "/";

                pathHttp += "contract/" + datadirectory;
                // 上传文件保存(阿里云oss对象存储)
                resultURL = this.aliputObject(pathHttp,file,fileName);
                IMGResponseInfo contractAttachmentResult = new IMGResponseInfo().success(resultURL);
                contractAttachmentResult.setMsg(file.getOriginalFilename());
                return contractAttachmentResult;
            }

            return new IMGResponseInfo().error("未知的错误");
        } catch (Exception e) {
            //throw new RuntimeException(e);
            return new IMGResponseInfo().error(e.getMessage());
        }
    }


    /**
     * 上传阿里云oss对象存储
     * @param path
     * @param file
     * @param objectName
     * @return
     */
    public String aliputObject(String path, MultipartFile file, String objectName) {
        OSS ossClient = null;
        try {
            ossClient = new OSSClientBuilder().build(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET);
            InputStream inputStream = file.getInputStream();
            // 创建上传Object的Metadata
            ObjectMetadata objectMetadata = new ObjectMetadata();
            objectMetadata.setContentLength(inputStream.available());
            objectMetadata.setCacheControl("max-age=315360000");
            objectMetadata.setContentType(getContentType(file, objectName));
            objectMetadata.setContentDisposition("inline;filename=" + file.getOriginalFilename());
            ossClient.putObject(BUCKET_NAME, objectName, inputStream, objectMetadata);
        } catch (Exception e) {
            e.printStackTrace();
            e.getMessage();
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
        String endPath = "/" + path + objectName;
        return "https://" + OUTURL + endPath;
    }

    private String getContentType(MultipartFile file, String objectName) {
        String contentType = file.getContentType();
        if (contentType != null && contentType.contains("image")) {
            String FileNameExtension = objectName.substring(objectName.lastIndexOf("."));
            if (FileNameExtension.equalsIgnoreCase(".bmp")) {
                return "image/bmp";
            }
            if (FileNameExtension.equalsIgnoreCase(".gif")) {
                return "image/gif";
            }
            if (FileNameExtension.equalsIgnoreCase(".jpeg") ||
                FileNameExtension.equalsIgnoreCase(".jpg") ||
                FileNameExtension.equalsIgnoreCase(".png")
            ) {
                return "image/jpg";
            }
            return "image/jpg";
        } else {
            return contentType;
        }
    }



    /**
     * 生成文件名称
     * @return
     */
    private String MakeFileName() {
        java.util.Random ran = new java.util.Random();
        int intstr = (int) ran.nextInt(9);
        return new java.text.SimpleDateFormat("yyyyMMddHHmmss").format(new java.util.Date()) + (new Integer(intstr)).toString();
    }

    /**
     * 检查文件格式
     * @param fileExt 文件格式
     * @return
     */
    private boolean FileValidate(String fileExt, String allowType) {
        boolean FileGood = false;
        String[] Exts = allowType.split("[|]", -1);
        for (String FileType : Exts) {
            if (fileExt.equals(FileType)) {
                FileGood = true;
                break;
            }
        }
        return FileGood;
    }

    public class IMGResponseInfo {

        private String code;
        private String msg;
        private String file;

        public IMGResponseInfo() {

        }

        public IMGResponseInfo(String code, String msg, String file) {
            super();
            this.code = code;
            this.msg = msg;
            this.file = file;
        }

        public IMGResponseInfo error(String msg) {
            this.code = "0";
            this.msg = msg;
            this.file = "";
            return this;
        }

        public IMGResponseInfo success(String file) {
            this.code = "1";
            this.msg = "successfully";
            this.file = file;
            return this;
        }

        public String getCode() {
            return code;
        }
        public void setCode(String code) {
            this.code = code;
        }

        public String getMsg() {
            return msg;
        }
        public void setMsg(String msg) {
            this.msg = msg;
        }

        public String getFile() {
            return file;
        }
        public void setFile(String file) {
            this.file = file;
        }

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值