现有一些图片在服务器上的链接,在浏览器中打开这些链接是直接显示在浏览器页面的形式。
现在需要生成这些图片的单独下载以及打包下载链接,即在浏览器中打开下载链接后弹出下载框提示下载。由于前端存在跨域问题,所以图片下载由后台接口完成。
首先编写文件下载工具类:
进口java.net.URL; 进口java.net.MalformedURLException; 进口org.apache.commons.io.FileUtils; 公开课FileDownloadUtil {/* * *下载文件- - -返回下载后的文件存储路径 * * @param url文件路径 * @param dir目标存储目录 * @param文件名存储文件名 * @return */公共静态孔隙downloadHttpUrl (dir字符串url字符串,字符串文件名)抛出BusinessException { 尝试{ URL httpurl=新网址(URL); 文件dirfile=新文件(dir); 如果(! dirfile.exists ()) { dirfile.mkdirs (); } FileUtils。copyURLToFile (httpurl新文件(dir +文件名)); }捕捉(MalformedURLException e) { e.printStackTrace (); }捕捉(IOException e) { 26}e.printStackTrace (); } 公共静态布尔deleteFile(文件文件){ 如果(file.exists ()) { 返回file.delete (); } 返回错误; } }
<强>单张图片下载强>
控制器层接口:
进口org.apache.commons.lang.StringUtils; 进口. io . *; 保护HttpServletResponse反应;/* * *单张图片下载 * * @param url要下载的图片url * @author: nemowang */@ApiImplicitParams ({ @ApiImplicitParam (name=" url " value=" https://www.yisu.com/zixun/图片url”,要求=true,数据类型=白址?paramType=安檠?, }) @ApiOperation(值=" https://www.yisu.com/zixun/单张图片下载”,指出=暗フ磐计略亍? @RequestMapping (value=" https://www.yisu.com/downloadPicture ",方法=RequestMethod.GET) 公共空间downloadPicture(字符串url) {//拼接完整图片路径。这里填写图片链接 字符串urlPath=" ";//获取图片文件后缀名 字符串的后缀="。"+ stringutil的。substringAfterLast (url,“。”);//获取当前类的所在项目路径 文件目录=新文件(" "); 字符串courseFile; 字符串srcPath; 文件srcFile=零; FileInputStream FileInputStream=零; InputStream fis=零; OutputStream=零; 尝试{ courseFile=directory.getCanonicalPath (); 字符串文件名=" \ \ " + StringUtil.getUUID() +后缀;//下载文件 FileDownloadUtil。downloadHttpUrl (urlPath courseFile,文件名); srcPath=courseFile +文件名; srcFile=新文件(srcPath); fileInputStream=new fileInputStream (srcPath); fis=new BufferedInputStream (fileInputStream); byte[]缓冲=new byte [fis.available ()); fis.read(缓冲); response.setContentType(“应用程序/八进制”); 响应。setHeader(“附加”,“附件;文件名=" +文件名);=response.getOutputStream (); out.write(缓冲); out.flush (); out.close (); }捕捉(异常e) { e.printStackTrace (); 最后}{ 尝试{ 如果(fileInputStream !=null) { fileInputStream.close (); } 如果(fis !=null) { fis.close (); } 如果(!=null) { out.close (); } }捕捉(IOException e) { e.printStackTrace (); } }//删除中间文件 如果(srcFile !=null) { System.out.println (FileDownloadUtil.deleteFile (srcFile)); } }
因为是得到请求,所以直接拼接接口路由+参数,用浏览器打开就能弹出下载。
至此单张图片下载接口结束。
<强>多张图片打包下载强>
控制器层接口:
/* * *图片打包下载 */@ApiImplicitParams ({ @ApiImplicitParam (name=" url " value=" https://www.yisu.com/zixun/图片url列表”,要求=true,数据类型=傲斜怼?paramType=安檠?, }) @ApiOperation(值=" https://www.yisu.com/zixun/图片打包下载”,指出=巴计虬略亍? @RequestMapping (value=" https://www.yisu.com/downloadPictureList ",方法=RequestMethod.GET) 公共空间downloadPictureList (url列表){ List,fileNameList=new ArrayList<的在(); for (int i=0;我& lt;urls.size ();我+ +){//获取文件名 fileNameList.add (StringUtils.substringAfterLast (urls.get(我),"/"));//拼接完整图片路径 url。集(我域名+ urls.get(我)); }//获取当前类的所在项目路径 文件目录=新文件(" "); 字符串courseFile; 字符串srcPath; 文件srcFile=零;//要打包的文件列表 List Java Springboot如何基于图片生成下载链接