实现从oss(阿里云)服务器以附件形式下载文件
来源:互联网 发布:单纯的js做动态网站 编辑:程序博客网 时间:2024/06/05 11:52
笔者在项目中写一个从阿里云服务器上面以附件形式下载文件的接口时,遇到了问题,网上搜索无任何相关的解决方案,最后通过通过自己查阅API文档,再结合自己的经验,实现了下载功能。
通过查询oss官方文档,我发现只有一个下载文件到本地的方法(方法1),但是这个方法下载的文件只能够将文件下载到本地的一个固定的目录下,即必须要在API提供的方法中写死下载文件的下载路径,而且下载文件时没有任何下载提示,所以这个方法不适合直接在项目中使用。
/** * 从阿里云下载文件 (下载目录定死了的,无法更改) * @param map * @return */ // endpoint以杭州为例,其它region请按实际情况填写 String endpoint = "http://oss-cn-hangzhou.aliyuncs.com"; // accessKey请登录https://ak-console.aliyun.com/#/查看 String accessKeyId = "<yourAccessKeyId>"; String accessKeySecret = "<yourAccessKeySecret>"; String bucketName = "<yourBucketName>"; // 创建OSSClient实例 OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret); // 下载object到文件 new File("<yourLocalFile>"这个file对象需要给定一个本地目录,文件会下载到该目录中 ossClient.getObject(new GetObjectRequest(bucketName, "<yourKey>"), new File("<yourLocalFile>")); // 关闭client ossClient.shutdown();
最后通过API文档发现:
在“下载板块”第一个“以流形式”下载文件的方法中,“ossObject.getObjectContent()”方法可以获取指定id的文件并返回一个字节流,因此可以利用这个特性,自己改造一个方法(方法2):
/** * 从阿里云下载文件 (以附件形式下载) * @param request * @param response */@ResponseBody@RequestMapping(value = "/download", method = RequestMethod.GET)public void downLoadFile(HttpServletRequest request,HttpServletResponse response){try {String fileid = request.getParameter("fileid").toString();//从前台获取当前下载文件的id值(每个上传到阿里云的文件都会有一个独一无二的id值)String filename =request.getParameter("filename").toString();//从前台获取要下载文件的文件名int i=filename.lastIndexOf("\\");filename=filename.substring(i+1);String aliyunId = ApplicationPropertyUtils.getContextProperty("ALIYUN_ACCESS_KEY_ID");String aliyunSecret = ApplicationPropertyUtils.getContextProperty("ALIYUN_ACCESS_KEY_SECRET");String ossEndpoint = ApplicationPropertyUtils.getContextProperty("ALIYUN_OSS_ENDPOINT");OSSClient ossClient = new OSSClient(ossEndpoint, aliyunId, aliyunSecret);//获取fileid对应的阿里云上的文件对象OSSObject ossObject = ossClient.getObject(bucketName, fileid);//bucketName需要自己设置// 读去Object内容 返回BufferedInputStream in=new BufferedInputStream(ossObject.getObjectContent());//System.out.println(ossObject.getObjectContent().toString());BufferedOutputStream out=new BufferedOutputStream(response.getOutputStream());//通知浏览器以附件形式下载response.setHeader("Content-Disposition","attachment;filename="+URLEncoder.enco de(filename,"utf-8"));//BufferedOutputStream out=new BufferedOutputStream(new FileOutputStream(new File("f:\\a.txt")));byte[] car=new byte[1024];int L=0;while((L=in.read(car))!=-1){out.write(car, 0,L);}if(out!=null){out.flush();out.close();}if(in!=null){in.close();}ossClient.shutdown();} catch (Exception e) {e.printStackTrace();}}
上面这段代码就实现了用户自定义文件下载路径,并成功下载文件的方法!
——注意:
在实际使用该方法下载的过程中,可能遇到服务器不报错,但就是下载不下来文件的问题,这样有可能是前端页面发出下载请求的方式有误,必须是GET请求,而且不知道为什么,不能使用AJAX的get方式访问改方法,笔者使用的方式是用window.location.href访问,可能还有其它方式可以访问,笔者这里就不在说明了。
2 0
- 实现从oss(阿里云)服务器以附件形式下载文件(含批量下载)
- 实现从oss(阿里云)服务器以附件形式下载文件
- oss以附件的形式下载文件
- java后台简单从阿里云下载文件通知前端以附件的形式保存
- java后台简单从腾讯云下载文件通知前端以附件的形式保存
- 阿里云OSS文件下载
- 阿里云OSS文件下载功能简易实现
- 阿里云上传文件,下载文件 oss
- 阿里云 oss 文件下载进度显示
- 浏览器下载阿里云OSS文件
- 阿里云 oss服务器文件上传 java
- springMVC以附件形式下载PDF文件(解决了下载后文件格式出错无法打开的问题)
- oss阿里云上传文件设置下载文件名
- 阿里云oss服务器上传静态文件,图片
- Java图片文件上传阿里云OSS服务器
- 阿里云OSS 上传文件
- 阿里云OSS 文件上传
- php 利用阿里云oss实现托管文件
- 如何用Python写一个小游戏(2)
- [MySql]多表联查:join、left join、right join的用法
- 第十五周--用哈希组织关键字
- jQuery点击按钮元素移动(动画)
- matlab 基础3
- 实现从oss(阿里云)服务器以附件形式下载文件
- java GC 垃圾回收
- 用原生js实现复选框选择以及全选非全选功能 (待看)
- mosquitto 调试使用mqtt应用(mqtt调试助手)
- 02 - Centos7中安装Docker、虚拟机的网络配置
- 03 - Centos7中安装及验证Docker
- jQuery基础之表单验证
- select()函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET
- Postman-进阶使用