java生成图片url_Java Springboot如何基于图片生成下载链接

 2023-09-16 阅读 25 评论 0

摘要:现有一些图片在服务器上的链接,在浏览器中打开这些链接是直接显示在浏览器页面的形式。现在需要生成这些图片的单独下载以及打包下载链接,即在浏览器中打开下载链接后弹出下载框提示下载。由于前端存在跨域问题,所以图片下载由后台接口完成。java url、首

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

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

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

import java.net.URL;

import java.net.MalformedURLException;

java访问url、import org.apache.commons.io.FileUtils;

public class FileDownloadUtil {

/**

java导出图片,* 下载文件---返回下载后的文件存储路径

*

* @param url 文件路径

java读取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请求,所以也是拼接接口路由+参数,用浏览器打开就能弹出下载。

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

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/67252.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息