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

做网站有什么不好织梦网站模板还原的文件在哪里

做网站有什么不好,织梦网站模板还原的文件在哪里,可以看那种东西的手机浏览器,商城建设方案文件的上传和下载的实现原理的简单介绍 表单的构成 首先,我们先来介绍我们的需要用到的表单,在这个表单中,首先值得我们注意的就是,在type为file的input标签中.这个控件是我们主要用来选择上传的文件的, 除此之外,我们要想实现文件的上传,还需要将method的属性的值设置为post…文件的上传和下载的实现原理的简单介绍 表单的构成 首先,我们先来介绍我们的需要用到的表单,在这个表单中,首先值得我们注意的就是,在type为file的input标签中.这个控件是我们主要用来选择上传的文件的, 除此之外,我们要想实现文件的上传,还需要将method的属性的值设置为post,只有当请求方式为post的时候才能携带数据.以及enctype属性的值设置为multipart/form-data, 表示告诉浏览器以流的方式来处理我们的数据,这样在后台才能进行解析. 简单来说,在页面中,要想实现文件的上传需要进行必要的三个设置: 将input标签的type属性设置为file将form标签的method的属性的值设置为post将form标签的enctype属性的值设置为multipart/form-data 还有一点就是在H5之后,出现了一个新的属性叫做multiple,这个属性用在文件上传框中,可以一次上传多个文件. 然后,就是用来展示已经上传的文件的列表 列表的实现非常的简答,我们只只需要在页面加载的时候向后台发送一个请求,向负责文件读取的控制器请求一下文件列表,然后将获取的文件列表追加到表格中, 这个文件的编写比较重要的就是from属性的配置,以及在追加文件列表的时候注意标签和变量的拼接 页面代码 %--Created by IntelliJ IDEA.User: 33680Date: 2023/3/29Time: 8:25To change this template use File | Settings | File Templates. --% % page contentTypetext/html;charsetUTF-8 languagejava pageEncodingUTF-8 % html headtitle文件的上传和下载/titlescript src${pageContext.request.contextPath}/js/jquery-3.6.4.min.jstypetext/javascript/scriptstyletable{border: 2px solid black;}td{border: 1px solid black;}/style /head body form action${pageContext.request.contextPath}/fileUplode methodpost enctypemultipart/form-datatabletrtd width200 aligncenter文件上传${msg}/tdtd width200 aligncenter下载列表/td/trtrtdinput typefile namefiles multiplemultipleinput typereset value清空input typesubmit value提交/tdtd idfiles/td/tr/table /form script$(document).ready(function (){var url ${pageContext.request.contextPath}/getFileName;$.get(url,function (files){var files eval((files));for(var i 0;ifiles.length;i){$(#files).append(lia href${pageContext.request.contextPath}\/download?filenamefiles[i].namefiles[i].name/a/li)}})}) /script /body /html文件上传 在文件的上传这部分,首先我们需要获取文件的列表,所以我们需要使用SpringMVC的MultipartFile类来封装,要使用这个类,我们首先需要在配置文件中配置多部件解析器 多部件解析器 多部件解析器就是一个JavaBean,所以我们需要在spring-mvc.xml文件中进行配置,需要注意的是,这个JavaBean的id的值是固定的,所以我们在配置的时候需要注意 然后我们就可以配置其他属性了,我们使用依赖注入的方式向里面注入配置参数: defaultEncoding:这个属性是配置请求的编码格式,一般为UTF-8maxUploadSize:这个属性是限制上上传的文件的大小,单位是字节 在配置完成多部件解析器之后,我们就可以顺利的使用SpringMVC的MultipartFile类来处理上传的文件了. 对于这个类的使用,我们使用最频繁的方法主要有两个: isEmpty():这个方法用来判断上传的文件是否为空transferTo(File file):这个方法的功能是保存文件 文件上传的基本流程是:首先,我们从页面中上传文件到后台,然后后台使用MultipartFile类来封装文件,如果文件不为空,则将其使用transferTo()方法保存到我们设置的路径中. 在上传文件时对重名文件的处理 在我们上传文件的时候,可能会遇到重名的文件,对于重名的文件,我们要做一些设置改变他原有的名字.首先,我们要创建一个文件叫做files.json文件这个文件的作用是存放我们的文件名字. 在我们保存文件之前,我们要先读取这个文件,对于这个文件的读写操作,我们都封装进了一个工具类中,可以方便我们对文件信息类的操作, 之后,判断读取到的文件内容,如果内容为空,则表示是第一个文件,直接保存.如果文件中有内容,我们就将数据信息文件中的内容读取出来,并且封装进一个类中,更加方便我们在Java中操作这个数据信息. 然后我们会判断文件名是否重名,如果重名了,则将原来的文件名以.进行分割,然后在中间拼接上一个(1),变成一个新的文件名进行保存. 文件下载 对于文件的下载就比较简单了,基本的格式都是固定的 首先我们设置被下载的文件所在的文件夹的路径一般,我们要下载文件的时候会携带一个下载文件的请求,我们就可以使用文件夹路径和请求中携带的文件名参数拼接成唯一的文件路径,然后通过文件路径创建文件对象创建响应头对象,然后设置响应头,告诉浏览器我要对文件进行下载,并且以流的形式处理文件最后,我们使用Spring的ResponseEntity类对下载的文件进行处理操作,直接返回ResponseEntity类的对象,流处理的文件,响应头对象和响应状态码 文件名的的编码转换 我们接收到的文件的编码可能会导致出错,所以我们可能需要对文件名进行转码,转码的方式也很简单: 首先我们要判断发送请求的浏览器是否为火狐,如果是火狐我们需要按照火狐的方式修改编码然后就是判断如果不是火狐,则直接使用普通的方式修改文件编码即可 文件列表的展示 在之前我们上传文件的时候,我们会将上传的文件的文件名写入到一个json文件中,一个是用来判断文件是否重名,另一个作用是我们可以读取里面的信息, 传递到页面中形成一个列表,让我们的对文件有一个更直观的了解. 对于列表的展示,我们只需要获取json文件的路径,然后使用我们之前创建的JSON文件读取写入工具类,将我们的JSON文件的内容读取到页面中,然后在页面中对读取的数据进行处理之后展示出来即可 JSON文件操作工具类 package SpringMVC.Upload_and_download.utils; //这个包是在之前我们学过的方便我们对文件的读写操作的类 import org.apache.commons.io.IOUtils; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException;//这个类的作用是方便我们对JSON文件的读取操作 public class JSONFileUtils { // 读取文件中的内容public static String readFile(String filepath) throws IOException { // 根据传递进来的参数,创建文件输出流,将文件中的内容输出获取出来FileInputStream fis new FileInputStream(filepath);return IOUtils.toString(fis);} // 向文件中写入内容public static void writeFile(String data , String filepath)throws Exception{ // 根据传递进来的参数,创建文件输出流,将内容写入到文件FileOutputStream fos new FileOutputStream(filepath);IOUtils.write(data,fos);} } JSON文件映射类 package SpringMVC.Upload_and_download; //这个类的作用是为了方便Json内容的读取我们创建与Json内容对应的实体类方便我们在Java代码中的操作 public class Resource {private String name;Overridepublic String toString() {return Resource{ name name \ };}public String getName() {return name;}public void setName(String name) {this.name name;}public Resource(String name) {this.name name;}public Resource() {} }文件上传下载控制器 package SpringMVC.Upload_and_download.utils;import SpringMVC.Upload_and_download.Resource; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.io.FileUtils; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; import com.fasterxml.jackson.core.type.TypeReference; import sun.misc.BASE64Encoder; import javax.servlet.http.HttpServletRequest; import java.io.File; import java.io.IOException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List;//这个类的作用是实现文件的上传和下载 Controller public class FileController {/**** param files 保存上传的多个文件列表* param request 当前请求的信息* return 返回的是响应的页面以请求转发的方式* throws Exception 抛出多个异常直接抛出最大的异常*/ // 文件的上传RequestMapping(/fileUplode)public String fileUplode(MultipartFile[] files , HttpServletRequest request) throws Exception { //存放文件存放的路径String path request.getServletContext().getRealPath(/) files/; // 创建JSON转换类的对象ObjectMapper om new ObjectMapper(); // 判断上传的文件是否为空if(files!null files.length0){ // 如果文件列表不为空并且长度大于零则表示有文件上传正常进行处理for(MultipartFile file : files){//首先获取上传文件的文件名创建一个列表存放文件信息 // getOriginalFilename()方法是用来获取上传时的文件名String filename file.getOriginalFilename();ListResource list new ArrayList(); // 读取文件files.json文件中的数据判断上传的文件名是否重名String json JSONFileUtils.readFile(path/files.json); // 先判断JSON文件中是否有数据如果没有数据就表示这是第一个上传的文件肯定不会重名System.out.println(json.length());if(json.length()!0){ // 将JSON文件中的数据转换成集合方便我们的判断操作list om.readValue(json, new TypeReferenceListResource() {});for(Resource resource : list){ // 进行判断if (filename ! null filename.equals(resource.getName())) {String []strings filename.split(\\.);filename strings[0](1).strings[1];System.out.println(filename);}}} // 文件保存的完整路径String Filepath pathfilename; // 开始保存文件file.transferTo(new File(Filepath));list.add(new Resource(filename)); // 将集合中的数据转换成jsonjson om.writeValueAsString(list); // 将上传的文件名称保存在file.json中JSONFileUtils.writeFile(json,path/files.json);System.out.println(json);System.out.println(list.toString());} // 将文件的上传状态传递到页面中request.setAttribute(msg,上传成功);return forward:/SpringMVC/pages/FIle.jsp;} // 当我们没有进入第一个if时则表示所有的状态都是失败状态所以我们此处返回失败的状态信息request.setAttribute(msg,上传失败);return forward:/SpringMVC/pages/FIle.jsp;}// 实现文件列表的功能ResponseBodyRequestMapping(value /getFileName , produces text/html;charsetutf-8)public String getFileName(HttpServletRequest request) throws IOException { // 获取项目的路径String path request.getServletContext().getRealPath(/)files/files.json;return JSONFileUtils.readFile(path);}// 在实现文件下载之前我们需要先去实现一个解决文件乱码的问题public String getFileName(HttpServletRequest request,String filename)throws Exception{ // 由于各浏览器支持的编码格式转换的方式不一样,主要体现在火狐浏览器的配置不一样,所以这里需要获取请求头中携带的浏览器型号是不是火狐BASE64Encoder base64Encoder new BASE64Encoder();String agent request.getHeader(User-Agent);if(agent.equals(Firefox)){ // 如果是火狐,则需要使用火狐规则的浏览器转码格式filename ?UTF-8?B? base64Encoder.encode(filename.getBytes(StandardCharsets.UTF_8)) ?;}else { // 其他的就使用统一的转码方式filename URLEncoder.encode(filename,UTF-8);} // 最后将转码之后的文件名返回即可return filename;}// 实现文件的下载RequestMapping(/download)public ResponseEntitybyte[] fileDownload(HttpServletRequest request, String filename)throws Exception{ // 需要下载的文件的根路径String path request.getServletContext().getRealPath(/files/); // filename new String(filename.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8); // 根据传递进来的数据不同下载不同的文件File file new File(pathFile.separatorfilename); // 创建设置响应头的对象HttpHeaders headers new HttpHeaders(); // 将文件名进行转码处理filename this.getFileName(request,filename); // 告诉浏览器我要对这个文件进行下载处理headers.setContentDispositionFormData(attachment,filename); // 以流的形式处理文件headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); // 最后返回读取到的文件在浏览器中就可以显示为下载 // 使用SpringMVC的ResponseEntity处理封装的数据return new ResponseEntity(FileUtils.readFileToByteArray(file), headers, HttpStatus.OK);} }文件目录结构 注意点 对于文件的上传和下载,我们主要知道大概的流程,和我们需要做的事情即可,可以看到大部分的流程都是固定的,并且大部分都是工具类的使用,所以我们如果实在记不住具体的操作可以随时来复制就可以.
http://www.w-s-a.com/news/599369/

相关文章:

  • wordpress教程 网站标题莱芜大众网
  • 网站建设业务终止合作范本主机公园wordpress
  • 口碑好企业网站建设网站建设与什么专业有关
  • 助贷获客系统快速优化排名公司推荐
  • 重庆做网站优化推广的公司企业网站如何进行定位
  • 高密市赏旋网站设计有限公司山东广饶县建设局网站
  • 成都哪里有网站开发公司网业分离是什么
  • 购物导购网站开发女孩学建筑学好找工作吗
  • 做网站沈阳掌握夏邑进入公众号
  • 怎么做自动提卡网站谷歌推广怎么做
  • 大同网站建设熊掌号wordpress 首页单页
  • 青岛网站美工成都优秀网站建设
  • 聊城大型门户网站建设多版本wordpress
  • 建网站的公司 快云wordpress的搜索
  • 贷款网站模版东莞网站建设哪家专业
  • 做做网站已更新878网站正在建设中
  • dz旅游网站模板网站上做百度广告赚钱么
  • 青岛外贸假发网站建设seo优化名词解释
  • 四川建设厅网站施工员证查询网站建设行业政策
  • 网站全站出售dw怎么设计网页
  • 合肥网站建设方案服务网站建设推荐郑国华
  • 襄阳网站建设需要多少钱台州网站设计公司网站
  • 东莞专业拍摄做网站照片如何在百度上发布自己的广告
  • 网站建设费 科目做网站建设最好学什么
  • php商城网站建设多少钱深圳市建设
  • 有什么做糕点的视频网站黄岛做网站
  • 做视频课程网站建设一个普通网站需要多少钱
  • 专做化妆品的网站合肥做网站建设公司
  • 唐山企业网站网站建设费计入那个科目
  • 企业网站制作运营彩虹云主机官网