java生成图片url_Java Springboot如何基于图片生成下载链接
现有一些图片在服务器上的链接,在浏览器中打开这些链接是直接显示在浏览器页面的形式。
现在需要生成这些图片的单独下载以及打包下载链接,即在浏览器中打开下载链接后弹出下载框提示下载。由于前端存在跨域问题,所以图片下载由后台接口完成。
首先编写文件下载工具类:
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如何基于图片生成下载链接相关推荐
- 基于图片生成古诗(nlp)
项目简介:本项目可以通过分析所给的图片,提取其中的关键意向标签,并由关键词生成意境相关的五言绝句. 背景:通过阅读文献,我们了解到图片多分类.以及基于attention的Seq2Seq古诗生成模型已经 ...
- 借助CSDN将本地图片生成为链接
借助CSDN将本地图片生成为链接 有时我们在开发时需要用到自己的一些图片,如果我们将图片放在本地有各种不方便,我们可以将图片在CSDN写文章面板插入,CSDN会自动生成一个图片的链接.我们就可以使用啦 ...
- DELL服务器引导光盘图片及下载链接
DELL服务器引导光盘图片及下载链接 所有的下载地址均是ftp开头的,下载时,请 拷贝下载地址,然后放到浏览器的地址栏进行下载! 各个下载地址汇总: http://search.dell.com/re ...
- 使用IIS将APK生成下载链接详细步骤
使用IIS将APK生成下载链接详细步骤 1. Ctrl+s 搜索IIS 2 .设置网站 地址为下图 点击新建,加上扩展名,.apk 然后下面类型写 application/vnd.android.pa ...
- Python爬虫:利用JS逆向抓取携程网景点评论区图片的下载链接
Python爬虫:利用JS逆向抓取携程网景点评论区图片的下载链接 1. 前言 2. 实现过程 3. 运行结果 1. 前言 文章内容可能存在版权问题,为此,小编不提供相关实现代码,只是从js逆向说一说到 ...
- Head First Java(第2版)中文版.pdf免费资源下载链接,Head First Java第二版中文版.pdf
Head First Java(第2版)中文版.pdf免费资源下载链接(.pdf书籍的优点是便于直接在电脑中保存有电脑就可以阅读,如果觉得这本书给你提供到了很大的帮助,可以去书店补一本纸质版) 资源保 ...
- 闲鱼代码Java_面向未来的黑科技——UI2CODE闲鱼基于图片生成跨端代码
作者:闲鱼技术-青页 一直以来, 如何从'视觉稿'精确的还原出 对应的UI侧代码 一直是端侧开发同学工作里消耗比较大的部分,一方面这部分的工作 比较确定缺少技术深度,另一方面视觉设计师也需要投入大量的 ...
- Java+Jsoup: 爬取二次元妹子图片并下载到本地(完整代码)
简介 这是一个基于Jsoup的用来爬取网页上图片并下载到本地的Java项目. 完整项目见 https://github.com/AsajuHuishi/CrawlByJsoup exe文件见getIm ...
- windows下使用bat命令根据测站文件生成下载链接
场景描述: 有一个测站list文件,需要根据list里的测站生成不同的wget下载链接 方法: 写bat批处理文件可以很方便的解决这个问题 代码: ::关闭代码输出 @echo off ::设置变量 ...
最新文章
- 【java】第一阶段基础知识整理
- 常用实验资源共享整理 20111026
- python都学什么啊-你们都是怎么学 Python 的?
- 网络参考模型(Network Reference Model)
- 线上MYSQL同步报错故障处理总结 实现同步不一致进行邮件报警
- Html.RadioButtonFor和Html.DropDownListFor 用法--备忘
- 最新中文文本挖掘小例子及程序
- 坐火车卧铺,到底是上、中、下哪个好?其实简单对比一下就知道了
- JAVA之列表集合ArrayList
- mysql 一对多查询组成单表字段_单表多字段MySQL模糊查询的实现
- python贪心算法几个经典例子_python 贪心算法的实现
- 编程游戏开发:如何开发制作一款游戏?你需要做哪些准备?
- 华为无线ensp跨ac三层漫游
- ios-GET和POST
- 音频文件编辑 android,音频剪辑编辑APP
- c语言程序设计小球弹跳,C++Dos游戏设计——弹跳小球
- Word2007 生成目录英文变成大写的解决办法
- 网状结构(图)的基本知识——图的基本概念
- 【C++从入门到放弃】C++编译生成动态链接库*.so及如何调用*.so
- Ward Cunningham创建模式共享社区
热门文章
- Install And Configure ColdFusion MX 6.1 on Windows
- P01:01背包问题(转)
- 陕西卫视《关中男人》观后感--女人之后是男人?
- 【程序猿脱单指南】送你一份大礼包去追女神
- oracle 把逗号分隔符,oracle 分逗号分隔字符串函数
- jstree中文api文档_还在用 Swagger(丝袜哥)生成接口文档?我推荐你试试它。。。...
- 淘宝H5移动端解决方案
- Toolbar设置详解----掉坑总结
- Nacos内核设计之一致性协议
- mysql排序显示行数的语句_MySQL中sql语句count(*),orderby,随机数据展示。