OSS上传文件到阿里云
最近做项目,需要上传文件,因为上传到项目路径下,感觉有时候也挺不方便的,就试了一下上传文件到阿里云oss上去了,
oss的使用网上有很多介绍,都是去配置一下需要的数据,然后直接调用他的api就可以了。
这里贴一段可以直接使用的oss代码,有需要的可以自己参考下。
@Controller
@RequestMapping("/ossfile")
public class OSSFileController { @Autowired
private EventidService eventidService; //----------------------------------------------------------------------------------------------- private final static String OSS_PATH = ""; /**
* 阿里云ACCESS_ID
*/
private static String ACCESS_ID = "";
/**
* 阿里云ACCESS_KEY
*/
private static String ACCESS_KEY = "";
/**
* 阿里云OSS_ENDPOINT 青岛Url
*/
private static String OSS_ENDPOINT = ""; /**
* 阿里云BUCKET_NAME OSS
*/
private static String BUCKET_NAME = ""; @RequestMapping("/uploadfile")
public String uploadfile(@RequestParam("file") MultipartFile file,
@RequestParam("eventId") int eventId,
HttpSession session) throws FileNotFoundException {
ErrorResult result = new ErrorResult();
//先提前设置下oss的部分
OSSClient client = new OSSClient(OSS_ENDPOINT, ACCESS_ID, ACCESS_KEY);
OSSNewUtils.ensureBucket(client, BUCKET_NAME);
OSSNewUtils.setBucketPublicReadable(client, BUCKET_NAME); String Objectkey = file.getOriginalFilename(); String filename = file.getOriginalFilename();
System.out.println("文件名字"+file.getName()); //这里给提交过来的文件设置一个本地路径,
// 然后提交过来的文件先存入该路径,
// 然后再从该路径提交到阿里云服务器
// 得到uploadFile的绝对路径
String realPath = session.getServletContext().getRealPath("uploadFile");
// 将文件放在这个路径下
File filedir = new File(realPath,file.getOriginalFilename());
// 创建uploadFile目录
filedir.getParentFile().mkdir(); /*这里要写提交的文件地址,也就是已经下载到本地的本地文件地址*/
String uploadFilePath = filedir.toString(); //创建本地文件夹后,先将文件存入本地文件夹
try {
// 将上传的文件写入到本地中
file.transferTo(filedir);
session.setAttribute("imgPath", file.getOriginalFilename());
System.out.println("文件上传到本地文件夹完成,本地文件夹地址:"+ filedir.toString()/*uploadFilePath*/);
} catch (Exception e) {
e.printStackTrace();
System.err.println("文件上传到本地文件夹失败\n");
session.setAttribute("errMsg", e.toString());
} System.out.println("开始上传到阿里云服务器."); System.out.println("正在上传...");
OSSNewUtils.uploadFile(client, BUCKET_NAME, Objectkey, uploadFilePath); System.out.println("上传文件到阿里云成功"); //从阿里云服务器下载文件的存储地址
//String downloadFilePath = "C:\\ccc\\";
//System.out.println("正在下载...");
//downloadFile(client, BUCKET_NAME, Objectkey, downloadFilePath); //发送文件请求,也需要携带你的eventid事件的id,才能存取地址到相应的eventid中去
Eventid eventid = new Eventid();
eventid = eventidService.selectByPrimaryKey(eventId);
//设置数据库地址
eventid.setEventMediafile(OSS_PATH+"/"+Objectkey);
//将阿里云上的地址保存到数据库中去
int resul = eventidService.updateByPrimaryKey(eventid);
System.out.println("更新数据库文件地址字段成功!"); result.setStatus(200);
result.setError("成功的上传文件到阿里云");
result.setData(file);
return "uploadsuccess";
} }
还有一段使用到的oss工具类封装好了,直接使用吧。
public class OSSNewUtils {
/**
* 创建Bucket
*
* @param client OSSClient对象
* @param bucketName BUCKET名
* @throws OSSException
* @throws ClientException
*/
public static void ensureBucket(OSSClient client, String bucketName)throws OSSException, ClientException {
try{
client.createBucket(bucketName);
}catch(ServiceException e){
if(!OSSErrorCode.BUCKET_ALREADY_EXISTS.equals(e.getErrorCode())){
throw e;
}
}
}
/**
* 删除一个Bucket和其中的Objects
*
* @param client OSSClient对象
* @param bucketName Bucket名
* @throws OSSException
* @throws ClientException
*/
public static void deleteBucket(OSSClient client, String bucketName)throws OSSException, ClientException{
ObjectListing ObjectListing = client.listObjects(bucketName);
List<OSSObjectSummary> listDeletes = ObjectListing.getObjectSummaries();
for(int i = 0; i < listDeletes.size(); i++){
String objectName = listDeletes.get(i).getKey();
System.out.println("objectName = " + objectName);
//如果不为空,先删除bucket下的文件
client.deleteObject(bucketName, objectName);
}
client.deleteBucket(bucketName);
}
/**
* 把Bucket设置成所有人可读
*
* @param client OSSClient对象
* @param bucketName Bucket名
* @throws OSSException
* @throws ClientException
*/
public static void setBucketPublicReadable(OSSClient client, String bucketName)throws OSSException, ClientException{
//创建bucket
client.createBucket(bucketName);
//设置bucket的访问权限, public-read-write权限
client.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);
}
/**
* 上传文件
*
* @param client OSSClient对象
* @param bucketName Bucket名
* @param Objectkey 上传到OSS起的名
* @param filename 本地文件名
* @throws OSSException
* @throws ClientException
* @throws FileNotFoundException
*/
public static RespInfo uploadFile(OSSClient client, String bucketName, String Objectkey, String filename)
throws OSSException, ClientException, FileNotFoundException {
RespInfo respInfo = new RespInfo();
File file = new File(filename);
ObjectMetadata objectMeta = new ObjectMetadata();
objectMeta.setContentLength(file.length());
//判断上传类型,多的可根据自己需求来判定
if (filename.endsWith("xml")) {
objectMeta.setContentType("text/xml");
}
else if (filename.endsWith("jpg")) {
objectMeta.setContentType("image/jpeg");
}
else if (filename.endsWith("png")) {
objectMeta.setContentType("image/png");
}
InputStream input = new FileInputStream(file);
client.putObject(bucketName, Objectkey, input, objectMeta);
respInfo.setContent(filename);
return respInfo;
}
/**
* 下载文件
*
* @param client OSSClient对象
* @param bucketName Bucket名
* @param Objectkey 上传到OSS起的名
* @param filename 文件下载到本地保存的路径
* @throws OSSException
* @throws ClientException
*/
public static void downloadFile(OSSClient client, String bucketName, String Objectkey, String filename)
throws OSSException, ClientException {
client.getObject(new GetObjectRequest(bucketName, Objectkey),
new File(filename));
}
}
oss还有很多功能可以使用,过几天自己再试用一下其他的功能。
OSS上传文件到阿里云的更多相关文章
- 关于富文本编辑器ueditor(jsp版)上传文件到阿里云OSS的简单实例,适合新手
关于富文本编辑器ueditor(jsp版)上传文件到阿里云OSS的简单实例,适合新手 本人菜鸟一枚,最近公司有需求要用到富文本编辑器,我选择的是百度的ueditor富文本编辑器,闲话不多说,进入正 ...
- angulaijs中的ng-upload-file与阿里云oss服务的结合,实现在浏览器端上传文件到阿里云(速度可以达到1.5M)
2015-10-26 angularjs结合aliyun浏览器端oos文件上传加临时身份验证例子 在服务端获取sts 源码: public class StsServiceSample { // 目前 ...
- vue + elementUi + upLoadIamge组件 上传文件到阿里云oss
<template> <div class="upLoadIamge"> <el-upload action="https://jsonpl ...
- PHP 上传文件至阿里云OSS对象存储
简述 1.阿里云开通对象存储服务 OSS 并创建Bucket 2.下载PHP SDK至框架扩展目录,点我下载 3.码上code 阿里云操作 开通对象存储服务 OSS 创建 Bucket 配置Acces ...
- Vue上传通过“服务端签名后直传”上传文件到阿里云 报错 400 Bad Request
我报错的原因是 formData.append('file', file) 放在签名前面了 解决办法 formData.append('file', file) 一定在最后 /** * 上传文件到 o ...
- 使用axios上传文件到阿里云对象文件存储服务器oss
背景 OSS可用于图片.音视频.日志等海量文件的存储.各种终端设备.Web网站程序.移动应用可以直接向OSS写入或读取数据.OSS支持流式写入和文件写入两种方式.使用阿里云oss做文件存储的时候,不可 ...
- PHP上传文件到阿里云OSS,nginx代理访问
1. 阿里云OSS创建存储空间Bucket(读写权限为:公共读) 2. 拿到相关配置 accessKeyId:********* accessKeySecret:********* endpoint: ...
- Base64格式上传文件至阿里云(java)
Controller @PostMapping("/save") public R save(@RequestBody ShareEntity share){ OSSClient ...
- 上传文件到阿里云linux服务器
在“运行”中输入cmd,打开控制台,切换到刚才Putty的安装目录下,我的是E:\Putty,然后输入pscp命令,我们需要这个命令来实现文件的上传.如下图所示,命令格式为: pscp D:\recy ...
随机推荐
- 鸟哥的Linux私房菜笔记第四章
前言 对着<鸟哥的Linux私房菜-基础版>做了简化笔记.不想让自己知其然而不知其所然.所以写个博客让自己好好巩固一下,当然不可能把书中的内容全部写下来.在这里就简化一点把命令写下来. 让 ...
- 吴恩达深度学习笔记1-神经网络的编程基础(Basics of Neural Network programming)
一:二分类(Binary Classification) 逻辑回归是一个用于二分类(binary classification)的算法.在二分类问题中,我们的目标就是习得一个分类器,它以对象的特征向量 ...
- 深入学习Redis(4):哨兵
前言 在 深入学习Redis(3):主从复制 中曾提到,Redis主从复制的作用有数据热备.负载均衡.故障恢复等:但主从复制存在的一个问题是故障恢复无法自动化.本文将要介绍的哨兵,它基于Redis主从 ...
- 4K视频在线看,网速跟不上怎么办?
灿烂的阳光,温柔的风,二狗子一打开窗,觉得春天到了. “天气这么好,宅家玩电脑.”二狗子说着,点开了爱奇怪 App,最近一期的版本更新提到了支持 4K 视频播放,这是二狗子等了好久的功能. “今天我就 ...
- [翻译 EF Core in Action 2.1] 设置一个图书销售网站的场景
Entity Framework Core in Action Entityframework Core in action是 Jon P smith 所著的关于Entityframework Cor ...
- for in 和 for of 的区别
1.for...in 循环:只能获得对象的键名,不能获得键值 for...of 循环:允许遍历获得键值 var arr = ['red', 'green', 'blue'] for(let item ...
- 细说并发编程-TPL
本节导航 基本概念 并发编程 TPL 线程基础 windows为什么要支持线程 线程开销 CPU的发展 使用线程的理由 如何写一个简单Parallel.For循环 数据并行 Parallel.For剖 ...
- Microsoft SQL Server 双机热备份,实时同步
1.两台服务器,主服务器,从服务器,两台服务器都安装SQL Server 2008R2并且安装相同表结构的数据库(需要实时同步的数据库) 2.主服务器数据库安装完毕,打开SQL Server 配置管理 ...
- LeetCode算法题-Toeplitz Matrix(Java实现)
这是悦乐书的第312次更新,第333篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第181题(顺位题号是766).如果从左上角到右下角的每个对角线具有相同的元素,则矩阵是 ...
- 深入理解this关键字
Java提供了一个this关键字,this关键字总是指向调用该方法的对象.根据this出现的位置的不同,this作为对象的默认引用有两种情形. 1)构造器中引用该构造器正在初始化的对象. 2)在方法中 ...