java后台简单从阿里云上传下载文件并通知前端以附件的形式保存
一、 首先开通阿里的OSS 服务 创建一个存储空间在新建一个Bucket 在你新建的bucket有所需的id和key
获取外网访问地址或者是内网 看个人需求 我使用的是外网(内网没用过 估计是部署到阿里云服务器可以使用内网) 获取endpoint
好了前期准备工作完事
以下是我项目的机构
pom 配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.</modelVersion> <groupId>xudy.top</groupId>
<artifactId>OssAction</artifactId>
<version>1.0-SNAPSHOT</version> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5..RELEASE</version>
<relativePath/>
</parent> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency> <dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>2.7.</version>
</dependency> </dependencies> </project>
ConfigUtols 配置代码
@Component
public class ConfigUtils { /**
* 腾讯云配置
* @return
*/
@Bean
public OSSClient getCOSClient() {
return this.getOSSClient();
} /**
* 阿里云OSS对象存储 客户端
* @return
*/
public static OSSClient getOSSClient() {
String endpoint = "http://os.com";
String accessKeyId = "LTadAI";
String accessKeySecret = "zLIRj001";
// 创建OSSClient实例
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
return ossClient;
} }
Controller 里包含 上传 和下载代码:
@RestController
public class MainController { @Autowired
OSSClient ossClient; @GetMapping(value = "/upload")
public String OSSUpLoad(){ // 上传byte数组
// byte[] content = "Hello OSS xudy".getBytes();
// ossClient.putObject("xudy", "xudy", new ByteArrayInputStream(content)); String filePath = System.getProperty("user.dir") + File.separator + "file" + File.separator + "top.jpg";
// 上传文件流
try {
File file = new File(filePath);
InputStream inputStream = new FileInputStream(file); // 上传文件
ossClient.putObject("xudy", "txt.jpg", inputStream);
} catch (Exception e) {
// e.printStackTrace();
System.out.println("上传阿里云OSS服务器异常." + e.getMessage()); }
// 关闭client 正常开发的时候 做好把下面代码屏蔽
// ossClient.shutdown(); return "upload";
} @GetMapping(value = "/download")
public void OssAction(HttpServletRequest request, HttpServletResponse response){
try {
String fileName="txt.jpg";
String ossKey="txt.jpg";
// 从阿里云进行下载
OSSObject ossObject = ossClient.getObject("xudy",ossKey);//bucketName需要自己设置
// 已缓冲的方式从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取
BufferedReader reader = new BufferedReader(new InputStreamReader(ossObject.getObjectContent())); InputStream inputStream = ossObject.getObjectContent(); //缓冲文件输出流
BufferedOutputStream outputStream=new BufferedOutputStream(response.getOutputStream());
//通知浏览器以附件形式下载
// response.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(fileName,"UTF-8"));
// 为防止 文件名出现乱码
response.setContentType("application/doc");
final String userAgent = request.getHeader("USER-AGENT");
if(StringUtils.contains(userAgent, "MSIE")){//IE浏览器
fileName = URLEncoder.encode(fileName,"UTF-8");
}else if(StringUtils.contains(userAgent, "Mozilla")){//google,火狐浏览器
fileName = new String(fileName.getBytes(), "ISO8859-1");
}else{
fileName = URLEncoder.encode(fileName,"UTF-8");//其他浏览器
}
response.addHeader("Content-Disposition", "attachment;filename=" +fileName);//这里设置一下让浏览器弹出下载提示框,而不是直接在浏览器中打开
// 进行解码 如果上传时为了防止乱码 进行解码使用此方法
BASE64Decoder base64Decoder = new BASE64Decoder();
// byte[] car;
// while (true) {
// String line = reader.readLine();
// if (line == null) break;
// car = base64Decoder.decodeBuffer(line);
//
// outputStream.write(car);
// }
// reader.close(); byte[] car = new byte[1024];
int L; while((L = inputStream.read(car)) != -1){
if (car.length!=0){
outputStream.write(car, 0,L);
}
} if(outputStream!=null){
outputStream.flush();
outputStream.close();
} } catch (IOException e) {
e.printStackTrace(); } catch (OSSException e){ }
} /**
* 删除存储空间buckName
*/
public void deleteBucket(){
ossClient.deleteBucket(""); }
注意:在实际使用该方法下载的过程中,可能遇到服务器不报错,但就是下载不下来文件的问题,这样有可能是前端页面发出下载请求的方式有误,不能使用AJAX的get方式访问该方法,因为Ajax能够返回的数据格式只能为html,script,json,xml,不接受流的形式。笔者使用的方式是用window.location.href访问,或者使用from表单提交方式(GET/POST)。
源码:git@gitee.com:xdymemory00/OssDownLoad.git
借鉴来源:https://www.alibabacloud.com/help/zh/doc-detail/32014.htm
java后台简单从阿里云上传下载文件并通知前端以附件的形式保存的更多相关文章
- java后台简单从腾讯云下载文件通知前端以附件的形式保存
腾讯云对象存储和阿里云差不多 这是我的配置 /** * 腾讯云client * @return COSClient */ public static COSClient getCOSClient() ...
- vue 阿里云上传组件
vue 阿里云上传组件 Vue.js上传图片到阿里云OSS存储 测试项目git地址 本测试项目启动方法 示例链接 组件配置项 实践解释 本文主要介绍如何 在vue项目中使用web 直传方式上传阿里云o ...
- 如何利用京东云的对象存储(OSS)上传下载文件
作者:刘冀 在公有云厂商里都有对象存储,京东云也不例外,而且也兼容S3的标准因此可以利用相关的工具去上传下载文件,本文主要记录一下利用CloudBerry Explorer for Amazon S3 ...
- java web service 上传下载文件
1.新建动态web工程youmeFileServer,新建包com,里面新建类FileProgress package com; import java.io.FileInputStream; imp ...
- 【转】Java IOUtils方式上传下载文件 on HDFS
[From]https://www.cnblogs.com/areyouready/p/9795442.html package com.css.hdfs04; import java.io.File ...
- Linux系统简单易用的上传下载命令rz和sz
一)安装方法汇总 1.安装方法(推荐) yum install lrzsz -y 2.在安装Linux系统时选中"DialupNetworking Support"组包 3.安装系 ...
- 向linux服务器上传下载文件方式收集
向linux服务器上传下载文件方式收集 1. scp [优点]简单方便,安全可靠:支持限速参数[缺点]不支持排除目录[用法] scp就是secure copy,是用来进行远程文件拷贝的.数据传输使用 ...
- Jmeter 上传下载文件
最近很多同学都在问jmeter上传.下载文件的脚本怎么做,要压测上传.下载文件的功能,脚本怎么做,网上查了都说的很含糊,这次呢,咱们就好好的把jmeter的上传下载文件好好缕缕,都整明白了,怎么个过程 ...
- 在Windows上使用终端模拟程序连接操作Linux以及上传下载文件
在Windows上使用终端模拟程序连接操作Linux以及上传下载文件 [很简单,就是一个工具的使用而已,放这里是做个笔记.] 刚买的云主机,或者是虚拟机里安装的Linux系统,可能会涉及到在windo ...
随机推荐
- Shiro框架的简单应用
一.概念 Shiro是一个安全框架,可以进行角色.权限管理. Shiro主要功能如下:Authentication(认证):用户身份识别,通常被称为用户“登录”Authorization(授权):访问 ...
- 116. Populating Next Right Pointers in Each Node (Tree; WFS)
Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *nex ...
- Red Hat 系列如何快速定制二进制内核 RPM 包?
随着Linux服务器越来越多了,底层系统内核想要保持版本统一就需要定制专门的二进制安装包来便捷的升级和管理. RedHat系那当然就是使用rpmbuild来做定制化管理了. 今天我们分俩个部分(roo ...
- MVC页面和表单
@Styles.Render("~/Content/css")//在head中引用css @Scripts.Render("~/bundles/modernizr&quo ...
- Yii2 windows 安装步骤
安装 Yii2 高级版应用 基础版可以看官方文档 今天安装了YII2高级版应用 写下步骤 留个记号,以备查询! 在 Windows 中,你首先需要下载并运行 Composer-Setup.exe 查看 ...
- [mongoDB] mongoDb
mongodb memcached redis kv数据库(key/value) mongodb 文档数据库,存储的是文档(Bson->json的二进制化). 特点:内部执行引擎为 ...
- macOS 安装设置 Tunnelblick (openvpn 替代)
1、下载.安装 2、准备好 openvpn 相关的文件,全部放在一个目录中.主要有以下几个: ca.crt client.crt client.key client.ovpn 3、打开 client. ...
- Ckeditor 中粘贴图片
我们在ckeditor 中有上传图片,但是实际使用中这种手动上传图片方式并不是很方便,而是复制或者截图粘贴图片. 这里我们实现主要是获取对应的粘贴事件. CKEDITOR.instances[&quo ...
- Python里seed()函数
seed()函数的功功能是每次改变随机数生成器的种子,会改变下一次随机数模块生成的随机数.seed()方法在每次调用随机函数之前使用. 如果种子不变,那么随机函数生成的随机数相同,例如: #!/usr ...
- pycharm控制台出现python编译器的编辑功能
一.最近研究了下python,然后昨天发现新建项目后,出现如图的输入状况(Ctrl+Alt+F10) 二 二.更改方式 (1)点开如图位置,进入编辑模式 (2)将如图位置的√去掉就好了