旅游网站建设模版网站是否能够被恶意镜像

当前位置: 首页 > news >正文

旅游网站建设模版,网站是否能够被恶意镜像,如何给局域网 做网站,wordpress加载 jquery简介#xff1a; 本文详细介绍了在Java后端进行文件上传和下载的实现方法#xff0c;包括文件上传保存到本地的完整流程、文件下载的代码实现#xff0c;以及如何处理文件预览、下载大小限制和运行失败的问题#xff0c;并提供了完整的代码示例。 大体思路 1、文件上传 … 简介 本文详细介绍了在Java后端进行文件上传和下载的实现方法包括文件上传保存到本地的完整流程、文件下载的代码实现以及如何处理文件预览、下载大小限制和运行失败的问题并提供了完整的代码示例。 大体思路 1、文件上传 文件上传保存到本地我们要关注的是文件怎样接收怎样保存保存在哪 首先既然是文件就要有对应的文件保存地址或者说文件保存路径和文件保存目录都可以如下面这个代码我们定义一个字符串用来表示文件保存地址。 System.getProperty(user.dir) 表示当前后端项目的路径是固定的写法。它会自动识别当前项目所在的根路径每个人的可能都不一样 File.separator 表示分隔符也就是斜杠 / files表示之后所有的文件都存储在 files 文件包下 比如此处我的 ROOT_PATH(文件路径) 是 D:\code_github\Dream_java\java_chatroom\files 首先此处每个人的路径肯定都不相同不要疑问为什么和我的不一样因为咱项目所在位置就不一样 其次你也可以指定其它的路径这都是开放性的选择 private static final String ROOT_PATH System.getProperty(user.dir) File.separator files;我们写一个接口路径随意比如我这里的 /uploadceshi PostMapping(/uploadceshi)然后呢我们写对应的方法方法要有参数既然是文件我们就使用 MultipartFile 类型来进行接收后续也可以使用它的很多内置函数来进行文件的处理 public String uploadCeshi(MultipartFile file){}然后这样一个基础的接口就写好了而且已经能接收前端传来的文件了当前端上传文件后文件就保存成了我们的 file 参数接下来就可以对文件进行处理了。 首先我们要获取文件的原始名称来进行存储并取得文件的主名称和后缀以供后续使用 String originalFilename file.getOriginalFilename(); // 文件的原始名称 aaa.png log.info(文件的原始名称{}, originalFilename); String mainName FileUtil.mainName(originalFilename); // 文件的主名称 aaa log.info(文件的原始主名称{}, mainName); String extName FileUtil.extName(originalFilename); // 文件的扩展名(后缀) .png log.info(文件的原始后缀{}, extName);log.info 是日志打印的代码类似于 System.out.println() 如果 log.info 看不懂的话换成 System.out.println() 也是可以的 还记得我们开始定义的保存文件的父级目录么也就是 ROOT_PATH现在我们要保存文件了既然要保存我们需要判断这个父级目录是否存在如果不存在我们要先创建这个 “父级目录” // 如果当前文件的父级目录不存在就创建 if(!FileUtil.exist(ROOT_PATH)){FileUtil.mkdir(ROOT_PATH); // 如果当前文件的父级目录不存在就创建 }注意 FileUtil 不要导错包了此处我使用的是 hutool 的 如果不知道 hutool 是啥在maven仓库里搜下对应的依赖导入到 pom.xml 里就可以了 hutool 是个知名的工具包类似于 lombok 未成功先言败我们继续判断特殊情况比如当前上传的文件已经存在了那么这个时候我就要重命名一个文件 // 如果当前上传的文件已经存在了那么这个时候我就要重命名一个文件 if(FileUtil.exist(ROOT_PATH File.separator originalFilename)){originalFilename System.currentTimeMillis() - mainName . extName;log.info(文件已经存在重命名后的文件名{}, originalFilename); }特殊情况都处理完了我们进行文件的存储 File saveFile new File(ROOT_PATH File.separator originalFilename); // 要保存的文件地址/目录 file.transferTo(saveFile); // 存储文件到本地的磁盘里面去最后我们返回给前端一个URL也就是后续我们的下载接口地址 // 返回文件的链接这个链接就是文件的下载地址这个下载地址就是我的后台提供出来的 String url http:// ip : port /file/download?fileName originalFilename; log.info(文件的下载地址{}, url); return url;ip和port换成你对应的ip和端口号即可拼接成字符串比如我这里返回的url http://localhost:8080/file/download?fileName消息队列设计.pdf完整上传接口代码如下 ip、port 以及 ROOT_PATH 是我在类中这个方法外定义的变量所以没在下面这段代码里 PostMapping(/uploadceshi)public String uploadCeshi(MultipartFile file) throws IOException {String originalFilename file.getOriginalFilename(); // 文件的原始名称 aaa.pnglog.info(文件的原始名称{}, originalFilename);String mainName FileUtil.mainName(originalFilename); // 文件的主名称 aaalog.info(文件的原始主名称{}, mainName);String extName FileUtil.extName(originalFilename); // 文件的扩展名(后缀) .pnglog.info(文件的原始后缀{}, extName);System.out.println();// 如果当前文件的父级目录不存在就创建if(!FileUtil.exist(ROOT_PATH)){FileUtil.mkdir(ROOT_PATH); // 如果当前文件的父级目录不存在就创建}// 如果当前上传的文件已经存在了那么这个时候我就要重命名一个文件if(FileUtil.exist(ROOT_PATH File.separator originalFilename)){originalFilename System.currentTimeMillis() - mainName . extName;log.info(文件已经存在重命名后的文件名{}, originalFilename);}File saveFile new File(ROOT_PATH File.separator originalFilename); // 要保存的文件地址/目录file.transferTo(saveFile); // 存储文件到本地的磁盘里面去// 返回文件的链接这个链接就是文件的下载地址这个下载地址就是我的后台提供出来的 // String url http:// ip : port /file/download/ originalFilename;String url http:// ip : port /file/download?fileName originalFilename;log.info(文件的下载地址{}, url);return url;}2、文件下载 这个接口代码量少逻辑清晰我直接将代码全部放在下面然后一下子讲述完 这个接口的访问地址就是上传接口返回的url 下载接口有两个参数fileName接收想要下载的文件名 response.addHeader 等会再讲先简单讲述下作用使用第一个 response.addHeader 时访问url文件直接下载无法预览使用第二个 response.addHeader 时访问url文件如果可以预览则先预览不可以会进行下载 先取得完整的文件路径名如果路径不存在直接返回空存在则以字节流数组的方式返回前端 有人可能会疑问这里我写的返回类型不是 void 么怎么还可以返回数据给前端呢。这个简单理解为特殊情况吧而且文件IO本就相对于文本数据的操作有极大的不同 GetMapping(/download)public void download(String fileName, HttpServletResponse response) throws IOException { // response.addHeader(Content-Disposition, attachment;filename URLEncoder.encode(fileName, UTF-8)); // 附件下载// 默认格式就是预览浏览器会根据格式进行判断如果可以就预览不可以就下载 // response.addHeader(Content-Disposition, inline;filename URLEncoder.encode(fileName, UTF-8)); // 附件预览String filePath ROOT_PATH File.separator fileName;if(!FileUtil.exist(filePath)){return;}byte[] bytes FileUtil.readBytes(filePath);ServletOutputStream outputStream response.getOutputStream();outputStream.write(bytes); // 数组是一个字节数组也就是文件的字节流数组outputStream.flush();outputStream.close();}特殊讲解 —— 必看 1、文件预览/下载 // response.addHeader(Content-Disposition, attachment;filename URLEncoder.encode(fileName, UTF-8)); // 附件下载 // 默认格式就是预览浏览器会根据格式进行判断如果可以就预览不可以就下载 // response.addHeader(Content-Disposition, inline;filename URLEncoder.encode(fileName, UTF-8)); // 附件预览注意这两行代码 使用第一行代码就是文件下载使用第二行代码就是文件预览若无法预览则下载像图片、PDF可以预览应用软件包等无法1预览 很多东西可能有疑问为什么 那么此处就要讲一下响应中的一个属性了Content-Disposition当这个属性默认是inline 当它是 inline 时浏览器会进行下载操作当它是 attachment 时浏览器会进行下载操作 至于详细的就要剖析HTTP或HTTPS的请求和响应格式了感兴趣的朋友可以自己去了解 2、文件上传/下载大小限制

设置上传文件的限制大小

spring:servlet:multipart:max-file-size: 30MBmax-request-size: 30MB代码运行失败解决方法 1、包一定不要引错比如 lombok 和 hutool 2、ip和端口号换成自己的或者像我一样在yml里自己定义 3、文件可以预览或者下载请详细阅读此篇博客目录中的 “特殊讲解 —— 必看” 4、文件过大无法上传或下载请详细阅读此篇博客目录中的 “特殊讲解 —— 必看” 完整代码 注hutool、lombok等自行导入在maven仓库搜依赖即可(方式很多) ip、port是我在yml里定义的你直接换成你自己的ip和端口号即可一定要换 package com.example.demo.controller;import cn.hutool.core.io.FileUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile;import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException;RestController Slf4j RequestMapping(/file) public class FileCeshiController {// 项目启动的ip地址Value(\({ip:localhost}) // 给 ip 一个默认值防止忘定义时报错String ip;// 项目启动的端口号Value(\){server.port})String port;// System.getProperty(user.dir) 获取当前项目的根路径 此处为 D:\code_github\Dream_java\java_chatroom// File.separator 分隔符即 \ Windows 和 ios 通用private static final String ROOT_PATH System.getProperty(user.dir) File.separator files;PostMapping(/uploadceshi)public String uploadCeshi(MultipartFile file) throws IOException {String originalFilename file.getOriginalFilename(); // 文件的原始名称 aaa.pnglog.info(文件的原始名称{}, originalFilename);String mainName FileUtil.mainName(originalFilename); // 文件的主名称 aaalog.info(文件的原始主名称{}, mainName);String extName FileUtil.extName(originalFilename); // 文件的扩展名(后缀) .pnglog.info(文件的原始后缀{}, extName);System.out.println();// 如果当前文件的父级目录不存在就创建if(!FileUtil.exist(ROOT_PATH)){FileUtil.mkdir(ROOT_PATH); // 如果当前文件的父级目录不存在就创建}// 如果当前上传的文件已经存在了那么这个时候我就要重命名一个文件if(FileUtil.exist(ROOT_PATH File.separator originalFilename)){originalFilename System.currentTimeMillis() - mainName . extName;log.info(文件已经存在重命名后的文件名{}, originalFilename);}File saveFile new File(ROOT_PATH File.separator originalFilename); // 要保存的文件地址/目录file.transferTo(saveFile); // 存储文件到本地的磁盘里面去// 返回文件的链接这个链接就是文件的下载地址这个下载地址就是我的后台提供出来的String url http:// ip : port /file/download?fileName originalFilename;log.info(文件的下载地址{}, url);return url;}GetMapping(/download)public void download(String fileName, HttpServletResponse response) throws IOException { // response.addHeader(Content-Disposition, attachment;filename URLEncoder.encode(fileName, UTF-8)); // 附件下载// 默认格式就是预览浏览器会根据格式进行判断如果可以就预览不可以就下载 // response.addHeader(Content-Disposition, inline;filename URLEncoder.encode(fileName, UTF-8)); // 附件预览String filePath ROOT_PATH File.separator fileName;if(!FileUtil.exist(filePath)){return;}byte[] bytes FileUtil.readBytes(filePath);ServletOutputStream outputStream response.getOutputStream();outputStream.write(bytes); // 数组是一个字节数组也就是文件的字节流数组outputStream.flush();outputStream.close();}} 转载至Java后端如何进行文件上传和下载 —— 本地版文末配绝对能用的源码超详细超好用一看就懂博主在线解答 文件如何预览和下载超简单教程-阿里云开发者社区