首页   >   心得技巧

阿里云oss上传文件,报错“java.lang.ClassNotFoundException: org.jdom.input.JDOMParseException”

之前一直使用七牛云,好用归好用,但是它不提供目录分级的功能,着实是让我感到麻烦,为了表示目录层级,还必须将文件命名为带层级结构的,就去体验了一把阿里云oss,结果却分分钟报错:

Exception in thread "main" java.lang.NoClassDefFoundError: org/jdom/input/JDOMParseException
	at com.aliyun.oss.internal.OSSObjectOperation.putObject(OSSObjectOperation.java:130)
	at com.aliyun.oss.OSSClient.putObject(OSSClient.java:494)
	at com.aliyun.oss.OSSClient.putObject(OSSClient.java:478)
	at com.aliyun.oss.OSSClient.putObject(OSSClient.java:472)
	at com.wolffy.util.OssUtil.upload(OssUtil.java:49)
	at com.wolffy.util.OssUtil.main(OssUtil.java:131)
Caused by: java.lang.ClassNotFoundException: org.jdom.input.JDOMParseException
	at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 6 more

竟然是jdom报错了,这还是我之前做xml解析的时候引入的jar包,偷了个懒,没有直接去官网找文档,去百度查了一下,发现是因为我本机的jdom版本太高,阿里云oss只能使用1.x的jdom版本。。。

WTF,简直不能理解这是什么骚操作,吐槽过后,将jar包改为低版本的,问题还真的就解决了~

<!-- jdom,阿里云OSS只能使用1.1.x版本 -->
<dependency>
    <groupId>org.jdom</groupId>
    <artifactId>jdom</artifactId>
    <!--<version>2.0.2</version>-->
    <version>1.1.3</version>
</dependency>

我自己写的一个简易demo,有需要的可以拿去参考一下:

package com.wolffy.util;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URL;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;

/**
 * 阿里云OSS工具类,https://www.alibabacloud.com/help/zh/doc-detail/32013.htm
 *
 * @author SongFei
 * @date 2019/9/20 22:13
 */
@Setter
@Slf4j
public class OssUtil {

    /**
     * Region信息,就是你选择的地步分布,如:上海、杭州
     */
    private String endpoint = "http://oss-cn-shanghai.aliyuncs.com";

    /**
     * 密钥ID
     */
    private String accessKeyId = "你的accessKeyId";

    /**
     * 加密钥匙
     */
    private String accessKeySecret = "你的accessKeySecret";

    /**
     * 存储桶
     */
    private String bucketName = "你的bucketName";

    /**
     * 创建存储桶
     */
    public void createBucket() {
        try {
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            // 创建存储空间。
            ossClient.createBucket(bucketName);
            // 关闭OSSClient。
            ossClient.shutdown();
        } catch (Exception e) {
            log.error("创建bucket失败:{}", ExceptionUtils.getStackTrace(e));
            e.printStackTrace();
        }
    }

    /**
     * 上传本地文件至OSS
     *
     * @param filePath 文件路径
     * @param key      唯一key(在oss中的文件名字)
     */
    public void upload(String filePath, String key) {
        try {
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            // 上传内容到指定的存储空间(bucketName)并保存为指定的文件名称(key)。
            // String content = "Hello OSS";
            // ossClient.putObject(bucketName, key, new ByteArrayInputStream(content.getBytes()));
            ossClient.putObject(bucketName, key, new FileInputStream(new File(filePath)));
            // 关闭OSSClient。
            ossClient.shutdown();
        } catch (Exception e) {
            log.error("上传文件失败:{}", ExceptionUtils.getStackTrace(e));
            e.printStackTrace();
        }
    }

    /**
     * 上传文件,以IO流方式
     *
     * @param inputStream 输入流
     * @param key         唯一key(在oss中的文件名字)
     */
    public void upload(InputStream inputStream, String key) {
        try {
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            // 上传内容到指定的存储空间(bucketName)并保存为指定的文件名称(key)。
            // String content = "Hello OSS";
            // ossClient.putObject(bucketName, key, new ByteArrayInputStream(content.getBytes()));
            ossClient.putObject(bucketName, key, inputStream);
            // 关闭OSSClient。
            ossClient.shutdown();
        } catch (Exception e) {
            log.error("上传文件失败:{}", ExceptionUtils.getStackTrace(e));
            e.printStackTrace();
        }
    }

    /**
     * 上传本地文件至OSS
     *
     * @param file 文件
     * @param key  唯一key(在oss中的文件名字)
     */
    public void upload(File file, String key) {
        try {
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            // 上传内容到指定的存储空间(bucketName)并保存为指定的文件名称(key)。
            // String content = "Hello OSS";
            // ossClient.putObject(bucketName, key, new ByteArrayInputStream(content.getBytes()));
            ossClient.putObject(bucketName, key, new FileInputStream(file));
            // 关闭OSSClient。
            ossClient.shutdown();
        } catch (Exception e) {
            log.error("上传文件失败:{}", ExceptionUtils.getStackTrace(e));
            e.printStackTrace();
        }
    }

    /**
     * 上传网络文件至OSS
     *
     * @param url 文件url,如:http://www.baidu.com/xxx.jpg
     * @param key 唯一key(在oss中的文件名字)
     */
    public void uploadNetwork(String url, String key) {
        try {
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            // 上传网络流。
            InputStream inputStream = new URL(url).openStream();
            ossClient.putObject(bucketName, key, inputStream);
            // 关闭OSSClient。
            ossClient.shutdown();
        } catch (Exception e) {
            log.error("上传网络文件失败:{}", ExceptionUtils.getStackTrace(e));
            e.printStackTrace();
        }
    }

    /**
     * 删除OSS中的文件
     *
     * @param key 唯一key(在oss中的文件名字)
     */
    public void delete(String key) {
        try {
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            // 删除文件。
            ossClient.deleteObject(bucketName, key);
            // 关闭OSSClient。
            ossClient.shutdown();
        } catch (Exception e) {
            log.error("删除文件失败:{}", ExceptionUtils.getStackTrace(e));
            e.printStackTrace();
        }
    }

}

QQ群Ⅰ: 686430774 (已满)

QQ群Ⅱ: 718410762 (已满)

QQ群Ⅲ: 638620451

如果文章有帮到你,可以考虑请博主喝杯咖啡!

分享到:

欢迎分享本文,转载请注明出处!

作者:不忘初心

发布时间:2019-09-22

永久地址:https://www.jiweichengzhu.com/article/c314f35d662840929d22313a9bfe2214

评论