您现在的位置是:网站首页 > 心得技巧 > 编程技巧编程技巧
【原】阿里云oss上传文件,报错“java.lang.ClassNotFoundException: org.jdom.input.JDOMParseException”
不忘初心 2019-09-22 围观() 评论() 点赞() 【编程技巧】
简介:之前一直使用七牛云,好用贵好用,但是它不提供目录分级的功能,着实是让我感到麻烦,为了表示目录层级,还必须将文件命名为带层级结构的,今天换阿里云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();
}
}
}
看完文章,有任何疑问,请加入群聊一起交流!!!
很赞哦! ()
相关文章
标签云
猜你喜欢
- IntelliJ IDEA 2019.2已经可以利用补丁永久破解激活了
- IntelliJ IDEA 2019.3利用补丁永久破解激活教程
- IntelliJ IDEA高版本最灵活的永久破解激活方法(含插件激活,时长你说了算)
- Jetbrains全家桶基于ja-netfilter的最新破解激活详细图文教程
- IntelliJ IDEA 2022.1永久破解激活教程(亲测可用,持续更新)
- 分享几个正版 IntelliJ IDEA 激活码(破解码、注册码),亲测可用,持续更新
- ja-netfilter到底需不需要mymap,2021.3.2版本激活失效?
- 如何激活idea2022.1及以上版本中的插件(亲测可用)
- 【史上最全】IntelliJ IDEA最新2022.1版本安装和激活视频教学(含插件)
- IntelliJ IDEA 2022.2 版本最新2099年永久激活方法,亲测可用,也可以开启新UI了。
站点信息
- 网站程序:spring + freemarker
- 主题模板:《今夕何夕》
- 文章统计:篇文章
- 标签管理:标签云
- 微信公众号:扫描二维码,关注我们