文档章节

oss(阿里云)服务器以附件形式下载文件

明天_你好lzr
 明天_你好lzr
发布于 2016/12/08 16:26
字数 803
阅读 154
收藏 0
点赞 0
评论 0

笔者在项目中写一个从阿里云服务器上面以附件形式下载文件的接口时,遇到了问题,网上搜索无任何相关的解决方案,最后通过通过自己查阅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访问,可能还有其它方式可以访问,笔者这里就不在说明了。

© 著作权归作者所有

共有 人打赏支持
明天_你好lzr
粉丝 0
博文 6
码字总数 2603
作品 0
杭州
程序员
整合百度UEditor上传图片到阿里云OSS

前言 将图片上传到阿里云OSS是一种趋势,一个必然。当你的项目图片过多,需要频繁上传和替换的时候,用阿里云OSS可以很方便的管理你的图片,节省服务器空间,大大提高了效率。阿里云OSS是阿里...

zacklee ⋅ 2017/09/17 ⋅ 0

最新阿里云OSS文件上传部署

1、前往阿里云github下载SDK包:https://github.com/aliyun/aliyun-oss-php-sdk/releases。 这里介绍源码部署:Source code下载下来。.phar其实就是一个打包文件,直接引用后就能用,大家自己...

IT阿飞 ⋅ 2017/09/04 ⋅ 0

阿里云服务器ECS将数据备份到oss上的具体步骤

背景 网站的数据就是网站的灵魂,可是数据总是会因为各种原因,如服务器损坏,人员误操作而丢失 ,站长们最需要的就是能及时备份自己的数据。对于win服务器下的自动数据备份,网站文件,自然...

顶风走千里 ⋅ 2017/12/05 ⋅ 0

最新整合阿里云OSS方法-phpcms

1、为简化整合步骤,使用该方法整合后,默认是所有图片、附件都要上传至OSS,并未在后台设置中添加是否启用OSS的开关。 2、上传的图片或附件,还是会在PHPCMS所在服务器保留一份。主要是基于...

豆花饭烧土豆 ⋅ 2016/11/10 ⋅ 0

chixq/aliyun-oss-plugin

FIT2CLOUD Aliyun-OSS-Plugin for Jenkins 建立统一的artifacts仓库是后续的持续部署的前提。目前,建立artifacts仓库大致有如下三种选择: FTP服务器:很多用户仍然在用这种方式存储Artifac...

chixq ⋅ 2015/10/15 ⋅ 0

PHP版微信权限验证配置,音频文件下载,FFmpeg转码,上传OSS和删除转存服务器本地文件

一、概述和通过config接口注入权限验证配置 由于微信的(如:录音文件)上传到微信服务器上,。而我们需要长期保存,我们需要把资源从微信服务器转存到自己服务器,或者阿里云OSS/七牛云。 ...

Jack088 ⋅ 04/14 ⋅ 0

用DzzOffice管理阿里云OSS

在DzzOffice中分两种方式管理阿里云OSS 1、把阿里云oss作为多人或企业的共享网盘使用。 2、接入个人的阿里云oss管理,可同时管理多个bucket,多个bucket之间可以互传文件。 下面先介绍第一种...

Dzz傅浩 ⋅ 2014/07/02 ⋅ 0

Oracle RMAN备份上传到阿里云OSS脚本

DBA都知道,备份对于数据库的重要性是不言而喻的。特别是在误删数据的情况,救命用的最多的可能就是备份了。 有个客户的环境也比较复杂,单个服务器有三个Oracle实例,而且是部署在不同用户下...

newdba@dtstack ⋅ 04/26 ⋅ 0

DzzOffice 1.1.3 发布,个人网盘、团队、企业协作网盘

DzzOffice是一款云存储管理程序,可以用作个人网盘、团队、企业网盘使用。虚拟主机、独立服务器、云服务器都可以架设。支持将存储空间设置为云存储,如阿里云OSS。以满足大用户量时,单台服务...

Dzz傅浩 ⋅ 2014/08/18 ⋅ 37

上云迁移-海量数据迁移解决方案

摘要:传统数据存储在线下数据中心,存在成本高、运维难、性能难保障等等多方面的问题。阿里云提供闪电立方、OSS/NASImport、混合云存储阵列、镜像回源、302跳转、伪源站等六大解决方案为企业...

黄小凡 ⋅ 05/08 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

开启Swarm集群以及可视化管理

在搭建的两台coreos服务器上开启swarm集群 前置条件: docker均开启2375端口 同一个局域网内 主服务器上安装Portainer容器 安装Portainer容器执行: docker run -d -p 9000:9000 --restart=a...

ykbj ⋅ 6分钟前 ⋅ 0

单例设计模式

1、单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例 2、饿汉式单例类 在这个类被加载时,静态变量instance会被初始化,此时类的私有构造子会被调用 饿汉式是典型...

职业搬砖20年 ⋅ 11分钟前 ⋅ 0

前端基础(四):前端国际规范收集

字数:1142 阅读时间:5分钟 前言 由于前端技术的灵活性和杂乱性,导致网上的许多解决方案不够全面甚至是完全错误,容易起到误导作用。所以,我对搜索到的解决方案往往是存疑态度。那么,如何...

老司机带你撸代码 ⋅ 13分钟前 ⋅ 0

Failed to open/create Network-VirtualBox Host-Only

虚拟机版本 : Oracle Vm VirtualBox 5.2.12 报错时机:开网卡二,重启虚拟机报错 "Failed to open/create the internal network 'HostInterfaceNetworking-VirtualBox Host-Only Ethernet Ada......

p至尊宝 ⋅ 16分钟前 ⋅ 0

三分钟学会如何在函数计算中使用 puppeteer

摘要: 使用 puppeteer 结合函数计算,可以快速的构建弹性的服务完成各种功能,包括:生成网页截图或者 PDF、高级爬虫,可以爬取大量异步渲染内容的网页、模拟键盘输入、表单自动提交、登录网...

阿里云云栖社区 ⋅ 19分钟前 ⋅ 0

springMVC接收表单时 Bean对象有Double Int Char类型的处理

前台ajax提交表单price为double类型 后台controller就介绍不到 400错误 前台 实体类: public class ReleaseMapIconConfig{ private String id; private long maxValue; private long minVal......

废柴 ⋅ 22分钟前 ⋅ 0

ZOOKEEPER安装

工作需要在ubuntu上配置了一个zookeeper集群,有些问题记录下来。 1. zookeeper以来java,所以首先要安装java。但是ubuntu系统有自带的jdk,需要通过命令切换java版本: $ sudo update-alter...

恰东 ⋅ 25分钟前 ⋅ 0

linux 进程地址空间的一步步探究

我们知道,在32位机器上linux操作系统中的进程的地址空间大小是4G,其中0-3G是用户空间,3G-4G是内核空间。其实,这个4G的地址空间是不存在的,也就是我们所说的虚拟内存空间。 那虚拟内存空间...

HelloRookie ⋅ 25分钟前 ⋅ 0

myatis #{}与${}区别及原理

https://blog.csdn.net/wo541075754/article/details/54292751

李道福 ⋅ 28分钟前 ⋅ 0

三分钟学会如何在函数计算中使用 puppeteer

摘要: 使用 puppeteer 结合函数计算,可以快速的构建弹性的服务完成各种功能,包括:生成网页截图或者 PDF、高级爬虫,可以爬取大量异步渲染内容的网页、模拟键盘输入、表单自动提交、登录网...

猫耳m ⋅ 29分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部