oos 文件下载
来源:互联网 发布:怎么修复excel软件 编辑:程序博客网 时间:2024/06/05 22:33
前两篇写到了oos 上传 ,获取访问链接,那怎么下载呢。有两种方式
第一种使用文档里面的方法下载文件到本地,在读取文件下载给用户。第二种直接通过访问链接进行下载。
第一种下载方式
先写一个工具类将oos 的文件下载到本地具体代码如下
//key 为存储oos 的key 值 filename为下载后存储的路径 public static void downloadFile(String key, String filename) throws OSSException, ClientException, IOException { // 初始化OSSClient OSSClient ossClient = new OSSClient(FilePath.endpoint, FilePath.accessKeyId, FilePath.accessKeySecret); OSSObject object = ossClient.getObject(FilePath.bucketName, key); // 获取ObjectMeta ObjectMetadata meta = object.getObjectMetadata(); // 获取Object的输入流 InputStream objectContent = object.getObjectContent(); ObjectMetadata objectData = ossClient.getObject(new GetObjectRequest(FilePath.bucketName, key), new File(filename)); // 关闭数据流 objectContent.close(); }
将文件下载到本能后读取文件流下载,代码如下:
private void downFile(HttpServletResponse response,String Path) { try { File file = new File(Path); if (file.exists()) { InputStream ins = new FileInputStream(Path); BufferedInputStream bins = new BufferedInputStream(ins);// 放到缓冲流里面 OutputStream outs = response.getOutputStream();// 获取文件输出IO流 BufferedOutputStream bouts = new BufferedOutputStream(outs); response.setContentType("application/x-download");// 设置response内容的类型 response.setHeader( "Content-disposition", "attachment;filename=" + URLEncoder.encode(Path, "UTF-8"));// 设置头部信息 int bytesRead = 0; byte[] buffer = new byte[8192]; // 开始向网络传输文件流 while ((bytesRead = bins.read(buffer, 0, 8192)) != -1) { bouts.write(buffer, 0, bytesRead); } bouts.flush();// 这里一定要调用flush()方法 ins.close(); bins.close(); outs.close(); bouts.close(); } else { response.sendRedirect("../error.jsp"); } } catch (IOException e) { Log.error("文件下载出错", e); } }
写一个js 用来发起下载请求。传送一个key 作为参数key 是什么请参考获取访问链接这篇文章。http://www.haha174.top/article/details/256945
$(".b_down").unbind("click").click(function(){ var form=$("<form>");//定义一个form表单 form.attr("style","display:none"); form.attr("target",""); form.attr("method","post"); form.attr("action","/download/netfile.do"); var fileInput=$("<input>"); fileInput.attr("type","hidden"); fileInput.attr("id","id");//设置属性的名字 fileInput.attr("name","url");//设置属性的名字 fileInput.attr("value","other/dbz_1505399510989.jpg");//设置属性的值 $("body").append(form);//将表单放置在web中 form.append(fileInput); form.submit();//表单提交})
写一个controller进行测试
import javax.servlet.http.HttpServletResponse;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import com.yuan.boot.util.BatchDownloadAction;@RestController@RequestMapping("/download")public class DownLoadController { @RequestMapping("/netfile.do") public void DownLoadNet(String url,HttpServletResponse response) { new BatchDownloadAction().execute(response,url); } }
运行项目点击下载按钮出现如下图即成功实现了
第二种通过访问链接下载
首先先获取访问链接 具体的方法请参考http://www.haha174.top/article/details/256945
之后的到文件的输入流 然后 向网络传输文件流 完成下载具体工具类代码如下:
//通过链接下载 public void DownLoadLink(HttpServletResponse response, String key) throws Exception { String urlStr=new OSSManageUtil().getUrl(key);//(key,path); System.out.println(urlStr); if(StringUtils.isNotBlank(urlStr)) { URL url = new URL(urlStr); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); //设置超时间为3秒 conn.setConnectTimeout(3*1000); //防止屏蔽程序抓取而返回403错误 conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); //得到输入流 InputStream inputStream; inputStream = conn.getInputStream(); // InputStream ins = new FileInputStream(Path); BufferedInputStream bins = new BufferedInputStream(inputStream);// 放到缓冲流里面 OutputStream outs = response.getOutputStream();// 获取文件输出IO流 BufferedOutputStream bouts = new BufferedOutputStream(outs); response.setContentType("application/x-download");// 设置response内容的类型 response.setHeader( "Content-disposition", "attachment;filename=" + URLEncoder.encode(key, "UTF-8"));// 设置头部信息 int bytesRead = 0; byte[] buffer = new byte[8192]; // 开始向网络传输文件流 while ((bytesRead = bins.read(buffer, 0, 8192)) != -1) { bouts.write(buffer, 0, bytesRead); } bouts.flush();// 这里一定要调用flush()方法 inputStream.close(); bins.close(); outs.close(); bouts.close(); } else { response.sendRedirect("../error.jsp"); } //this.downFile(response,path); }
$(".b_down1").unbind("click").click(function(){ var form=$("<form>");//定义一个form表单 form.attr("style","display:none"); form.attr("target",""); form.attr("method","post"); form.attr("action","/download/netfile.do"); var fileInput=$("<input>"); fileInput.attr("type","hidden"); fileInput.attr("id","id");//设置属性的名字 fileInput.attr("name","url");//设置属性的名字 fileInput.attr("value","other/dbz_1505399510989.jpg");//设置属性的值 $("body").append(form);//将表单放置在web中 form.append(fileInput); form.submit();//表单提交})
写一个controller进行测试
import javax.servlet.http.HttpServletResponse;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import com.yuan.boot.util.BatchDownloadAction;@RestController@RequestMapping("/download")public class DownLoadController { @RequestMapping("/netfile.do") public void DownLoadNet(String url,HttpServletResponse response) { new BatchDownloadAction().execute(response,url); } @RequestMapping("/Linkfile.do") public void DownLoadLink(String url,HttpServletResponse response) throws Exception { new BatchDownloadAction().DownLoadLink(response,url); } }
出现此页面即成功
文章地址:http://www.haha174.top/article/details/251731
项目源码 https://github.com/haha174/day
阅读全文
0 0
- oos 文件下载
- java sdk 上传文件到阿里云 oos
- linux oos 声卡 驱动
- 对象流OOS和OIS
- CAS 实现单点登录oos(1)
- CAS 实现单点登录oos(2)
- oos 私有bucket 获取访问链接
- 下载图片,下载文件
- 文件下载
- 文件下载
- 文件下载
- 文件下载
- 文件下载
- 文件下载
- 下载文件
- 文件下载
- 下载文件
- 文件下载
- Linux进程调度算法
- YYCache源码分析(二)
- Core Java 总结(异常类问题)
- YYCache源码分析(三)
- 详解Hadoop核心架构
- oos 文件下载
- 基于Dubbo的分布式系统架构(三):安装dubbo监控中心
- leetcode 17. Letter Combinations of a Phone Number
- ACM-ICPC(2017)北京赛区网络赛-E-Territorial Dispute(计算几何->凸包)
- 调整数组顺序使奇数位于偶数前面
- NodeManager代码分析之NodeManager启动过程
- Redis学习02——Jedis使用
- mybatis入门基础(十)-----分页查询
- 算法练习(3)—— 栈