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

  

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

  

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

  

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

        进口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如何基于图片生成下载链接