现有一些图片在服务器上的链接,在浏览器中打开这些链接是直接显示在浏览器页面的形式。

现在需要生成这些图片的单独下载以及打包下载链接,即在浏览器中打开下载链接后弹出下载框提示下载。由于前端存在跨域问题,所以图片下载由后台接口完成。

首先编写文件下载工具类:

import java.net.URL;

import java.net.MalformedURLException;

import org.apache.commons.io.FileUtils;

public class FileDownloadUtil {

/**

* 下载文件---返回下载后的文件存储路径

*

* @param url 文件路径

* @param dir 目标存储目录

* @param fileName 存储文件名

* @return

*/

public static void downloadHttpUrl(String url, String dir, String fileName) throws BusinessException {

try {

URL httpurl = new URL(url);

File dirfile = new File(dir);

if (!dirfile.exists()) {

dirfile.mkdirs();

}

FileUtils.copyURLToFile(httpurl, new File(dir+fileName));

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();26 }

}

public static boolean deleteFile(File file) {

if (file.exists()) {

return file.delete();

}

return false;

}

单张图片下载

Controller层接口:

import org.apache.commons.lang.StringUtils;

import java.io.*;

protected HttpServletResponse response;

/**

* 单张图片下载

*

* @param url 要下载的图片url

* @author: nemowang

*/

@ApiImplicitParams({

@ApiImplicitParam(name = "url", value = "图片url", required = true, dataType = "String", paramType = "query"),

})

@ApiOperation(value = "单张图片下载", notes = "单张图片下载")

@RequestMapping(value = "/downloadPicture", method = RequestMethod.GET)

public void downloadPicture(String url) {

// 拼接完整图片路径。这里填写图片链接

String urlPath = "";

// 获取图片文件后缀名

String postfix = "." + StringUtils.substringAfterLast(url, ".");

// 获取当前类的所在项目路径

File directory = new File("");

String courseFile;

String srcPath;

File srcFile = null;

FileInputStream fileInputStream = null;

InputStream fis = null;

OutputStream out = null;

try {

courseFile = directory.getCanonicalPath();

String fileName = "\\" + StringUtil.getUUID() + postfix;

// 下载文件

FileDownloadUtil.downloadHttpUrl(urlPath, courseFile, fileName);

srcPath = courseFile + fileName;

srcFile = new File(srcPath);

fileInputStream = new FileInputStream(srcPath);

fis = new BufferedInputStream(fileInputStream);

byte[] buffer = new byte[fis.available()];

fis.read(buffer);

response.setContentType("application/octet-stream");

response.setHeader("Content-disposition", "attachment;filename=" + fileName);

out = response.getOutputStream();

out.write(buffer);

out.flush();

out.close();

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

if (fileInputStream != null) {

fileInputStream.close();

}

if (fis != null) {

fis.close();

}

if (out != null) {

out.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

// 删除中间文件

if (srcFile != null) {

System.out.println(FileDownloadUtil.deleteFile(srcFile));

}

}

因为是GET请求,所以直接拼接接口路由+参数,用浏览器打开就能弹出下载。

至此单张图片下载接口结束。

多张图片打包下载

Controller层接口:

/**

* 图片打包下载

*/

@ApiImplicitParams({

@ApiImplicitParam(name = "urls", value = "图片url列表", required = true, dataType = "List", paramType = "query"),

})

@ApiOperation(value = "图片打包下载", notes = "图片打包下载")

@RequestMapping(value = "/downloadPictureList", method = RequestMethod.GET)

public void downloadPictureList(List urls) {

List fileNameList = new ArrayList<>();

for (int i = 0; i < urls.size(); i++) {

// 获取文件名

fileNameList.add(StringUtils.substringAfterLast(urls.get(i), "/"));

// 拼接完整图片路径

urls.set(i, DOMAIN + urls.get(i));

}

// 获取当前类的所在项目路径

File directory = new File("");

String courseFile;

String srcPath;

File srcFile = null;

// 要打包的文件列表

List fileList = new ArrayList<>();

ZipOutputStream zos = null;

OutputStream out = null;

try {

courseFile = directory.getCanonicalPath();

// 下载文件

for (int i = 0; i < urls.size(); i++) {

String fileName = "\\" + fileNameList.get(i);

FileDownloadUtil.downloadHttpUrl(urls.get(i), courseFile, fileName);

srcPath = courseFile + fileName;

srcFile = new File(srcPath);

fileList.add(srcFile);

}

long start = System.currentTimeMillis();

response.setContentType("application/x-zip-compressed");

response.setHeader("Content-disposition", "attachment;filename=" + StringUtil.getUUID() + ".zip");

out = response.getOutputStream();

zos = new ZipOutputStream(out);

for (File file : fileList) {

byte[] buf = new byte[BUFFER_SIZE];

zos.putNextEntry(new ZipEntry(file.getName()));

int len;

FileInputStream in = new FileInputStream(file);

while ((len = in.read(buf)) != -1) {

zos.write(buf, 0, len);

}

zos.closeEntry();

in.close();

}

long end = System.currentTimeMillis();

System.out.println("压缩完成,耗时:" + (end - start) + " ms");

out.flush();

} catch (IOException e) {

e.printStackTrace();

} catch (Exception e) {

throw new RuntimeException("zip error from ZipUtils", e);

} finally {

if (zos != null) {

try {

zos.close();

} catch (IOException e) {

e.printStackTrace();

}

}

if (out != null) {

try {

zos.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

// 删除中间文件

if (fileList != null) {

for (File file : fileList) {

System.out.println(FileDownloadUtil.deleteFile(file));

}

}

}

同样是GET请求,所以也是拼接接口路由+参数,用浏览器打开就能弹出下载。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

java生成图片url_Java Springboot如何基于图片生成下载链接相关推荐

  1. 基于图片生成古诗(nlp)

    项目简介:本项目可以通过分析所给的图片,提取其中的关键意向标签,并由关键词生成意境相关的五言绝句. 背景:通过阅读文献,我们了解到图片多分类.以及基于attention的Seq2Seq古诗生成模型已经 ...

  2. 借助CSDN将本地图片生成为链接

    借助CSDN将本地图片生成为链接 有时我们在开发时需要用到自己的一些图片,如果我们将图片放在本地有各种不方便,我们可以将图片在CSDN写文章面板插入,CSDN会自动生成一个图片的链接.我们就可以使用啦 ...

  3. DELL服务器引导光盘图片及下载链接

    DELL服务器引导光盘图片及下载链接 所有的下载地址均是ftp开头的,下载时,请 拷贝下载地址,然后放到浏览器的地址栏进行下载! 各个下载地址汇总: http://search.dell.com/re ...

  4. 使用IIS将APK生成下载链接详细步骤

    使用IIS将APK生成下载链接详细步骤 1. Ctrl+s 搜索IIS 2 .设置网站 地址为下图 点击新建,加上扩展名,.apk 然后下面类型写 application/vnd.android.pa ...

  5. Python爬虫:利用JS逆向抓取携程网景点评论区图片的下载链接

    Python爬虫:利用JS逆向抓取携程网景点评论区图片的下载链接 1. 前言 2. 实现过程 3. 运行结果 1. 前言 文章内容可能存在版权问题,为此,小编不提供相关实现代码,只是从js逆向说一说到 ...

  6. Head First Java(第2版)中文版.pdf免费资源下载链接,Head First Java第二版中文版.pdf

    Head First Java(第2版)中文版.pdf免费资源下载链接(.pdf书籍的优点是便于直接在电脑中保存有电脑就可以阅读,如果觉得这本书给你提供到了很大的帮助,可以去书店补一本纸质版) 资源保 ...

  7. 闲鱼代码Java_面向未来的黑科技——UI2CODE闲鱼基于图片生成跨端代码

    作者:闲鱼技术-青页 一直以来, 如何从'视觉稿'精确的还原出 对应的UI侧代码 一直是端侧开发同学工作里消耗比较大的部分,一方面这部分的工作 比较确定缺少技术深度,另一方面视觉设计师也需要投入大量的 ...

  8. Java+Jsoup: 爬取二次元妹子图片并下载到本地(完整代码)

    简介 这是一个基于Jsoup的用来爬取网页上图片并下载到本地的Java项目. 完整项目见 https://github.com/AsajuHuishi/CrawlByJsoup exe文件见getIm ...

  9. windows下使用bat命令根据测站文件生成下载链接

    场景描述: 有一个测站list文件,需要根据list里的测站生成不同的wget下载链接 方法: 写bat批处理文件可以很方便的解决这个问题 代码: ::关闭代码输出 @echo off ::设置变量 ...

最新文章

  1. 【java】第一阶段基础知识整理
  2. 常用实验资源共享整理 20111026
  3. python都学什么啊-你们都是怎么学 Python 的?
  4. 网络参考模型(Network Reference Model)
  5. 线上MYSQL同步报错故障处理总结 实现同步不一致进行邮件报警
  6. Html.RadioButtonFor和Html.DropDownListFor 用法--备忘
  7. 最新中文文本挖掘小例子及程序
  8. 坐火车卧铺,到底是上、中、下哪个好?其实简单对比一下就知道了
  9. JAVA之列表集合ArrayList
  10. mysql 一对多查询组成单表字段_单表多字段MySQL模糊查询的实现
  11. python贪心算法几个经典例子_python 贪心算法的实现
  12. 编程游戏开发:如何开发制作一款游戏?你需要做哪些准备?
  13. 华为无线ensp跨ac三层漫游
  14. ios-GET和POST
  15. 音频文件编辑 android,音频剪辑编辑APP
  16. c语言程序设计小球弹跳,C++Dos游戏设计——弹跳小球
  17. Word2007 生成目录英文变成大写的解决办法
  18. 网状结构(图)的基本知识——图的基本概念
  19. 【C++从入门到放弃】C++编译生成动态链接库*.so及如何调用*.so
  20. Ward Cunningham创建模式共享社区

热门文章

  1. Install And Configure ColdFusion MX 6.1 on Windows
  2. P01:01背包问题(转)
  3. 陕西卫视《关中男人》观后感--女人之后是男人?
  4. 【程序猿脱单指南】送你一份大礼包去追女神
  5. oracle 把逗号分隔符,oracle 分逗号分隔字符串函数
  6. jstree中文api文档_还在用 Swagger(丝袜哥)生成接口文档?我推荐你试试它。。。...
  7. 淘宝H5移动端解决方案
  8. Toolbar设置详解----掉坑总结
  9. Nacos内核设计之一致性协议
  10. mysql排序显示行数的语句_MySQL中sql语句count(*),orderby,随机数据展示。