在微服务项目中,我经常会碰到从一个微服务项目转发下载请求并实现下载文件的微服务项需求,因此在此做一个转发下载的示例 。总的目转下载转发流程如下,我会按照这个流程一一介绍下载流程。
这里主要介绍controller层是如何接收客户端发送请求的代码,接收参数的代码如下
@GetMapping(value = "downloadFile")public void downloadFile( HttpServletResponse response) {}
转发服务器的下载请求主要通过Feign接口实现,具体实现代码如下:
Feign接口:
@PostMapping(value = "/downloadFile")Response downloadFile();
Feign接口实现类:
@Overridepublic Response downloadFile() {return null;}
之后便可以利用Feign实现转发了controller层代码完善如下:
@GetMapping(value = "downloadFile")public void downloadFile( HttpServletResponse response) {InputStream inputStream = null;try {Response serviceResponse = queryBranchService.downloadFile(url,sapNo);} catch (IOException e) {e.printStackTrace();}}
该代码的总体思路就是将文件变成输出流并写在响应中,并返回给转发服务器 。
@GetMapping(value = "downloadFile")public void downloadFile(HttpServletResponse response) {//获取upload文件夹的目转路径try {InputStream contentInput = OkHttpClientUtils.getImage(url, null);BufferedInputStream bufferedInputStream = new BufferedInputStream(contentInput);response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(sapNo+".png", "UTF-8"));BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(response.getOutputStream());int length = 0;byte[] temp = new byte[1024 * 10];while ((length = bufferedInputStream.read(temp)) != -1) {bufferedOutputStream.write(temp, 0, length);}bufferedOutputStream.flush();bufferedOutputStream.close();bufferedInputStream.close();} catch (FileNotFoundException e) {e.printStackTrace();log.error(e.getMessage());} catch (IOException e) {e.printStackTrace();log.error(e.getMessage());}}
对转发服务器的controller层再继续完善,完善的总思路拿到中转服务器的响应,并拿出响应中输入流再变成输出流回写给客户端
@GetMapping(value = "downloadFile")public void downloadFile( HttpServletResponse response) {InputStream inputStream = null;try {InputStream inputStream = null;try {Response serviceResponse = queryBranchService.downloadFile();Response.Body body = serviceResponse.body();inputStream = body.asInputStream();BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);response.setHeader("Content-Disposition", serviceResponse.headers().get("Content-Disposition").toString().replace("[", "").replace("]", ""));BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(response.getOutputStream());int length = 0;byte[] temp = new byte[1024 * 10];while ((length = bufferedInputStream.read(temp)) != -1) {bufferedOutputStream.write(temp, 0, length);}bufferedOutputStream.flush();bufferedOutputStream.close();bufferedInputStream.close();inputStream.close();} catch (IOException e) {e.printStackTrace();}} catch (IOException e) {e.printStackTrace();}}
chatgpt免费软件,chatgpt api 免费接口,chatgpt 聊天机器人教程,chatgpt 指令大全,chatgpt app
低质量链接: 这些泛目录通常包含大量没有相关性和质量的链接,可能是请求垃圾网站
、低质量内容的微服务项网页等。
大规模提交: 黑帽SEO从业者可能会使用自动化工具或批量提交链接到多个泛目录,目转以获得大量的发并链接 。
关联性缺失: 这些链接往往与网站内容毫无关联
,响应下载只是请求为了增加外部链接数量而存在。
短期效果: 虽然某些黑帽SEO方法可能在短期内带来排名上升 ,但这种效果往往是暂时的,搜索引擎很快就会识别并降低这些网站的排名
。
风险高: 使用黑帽SEO策略会使网站面临被搜索引擎惩罚的风险,这可能导致排名的急剧下降甚至是从搜索结果中被删除。
黑帽SEO是不道德和不推荐的做法 ,违反了搜索引擎的规则和准则。相反,白帽SEO强调提供有价值的内容、优化网站结构和技术
、获得高质量的自然链接等方法来提高网站的排名和可见性。长期而言,采用合规的SEO策略将有助于建立健康 、可持续的网站排名。