我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用。

首先我们需要了解的是上传文件三要素:

1.表单提交方式:post (get方式提交有大小限制,post没有)

2.表单的enctype属性:必须设置为multipart/form-data.

3.表单必须有文件上传项:file,且文件项需要给定name值

上传文件夹需要增加一个属性webkitdirectory,像这样:

<input id="fileFolder" name="fileFolder" type="file"  webkitdirectory>

js中可以判断文件夹中文件数量及文件夹大小是否符合要求,不符合要求不能向后台提交:

document.getElementById('fileFolder').onchange = function(e) {

actual_filesSize=0;

//是否选中文件夹  文件夹是否为空  数量和大小是否超过限制

//判断是否选中文件

var file=$("#fileFolder").val();

if(file!=""){

var files = e.target.files;            // files是选中的文件夹数组

//文件数量

actual_filesCount = files.length;

if(actual_filesCount > filesCount){

$("#tips").text(msg2+filesCount+msg3);

document.getElementById("tips").style.color="red";

return;

}

//修改tips文本框内容

$("#tips").text(actual_filesCount+tip);

document.getElementById("tips").style.color="black";

for (var i = 0; i< files.length; ++i){

actual_filesSize=actual_filesSize+files[i].size;

if(actual_filesSize > filesSize){

$("#tips").text(msg4+(filesSize/1024/1024)+"M");

document.getElementById("tips").style.color="red";

return;

}

}

}else{

$("#tips").text(msg);

document.getElementById("tips").style.color="red";

return;

}

};

选择文件,选择文件夹,粘贴文件和文件夹的逻辑

后台在接收文件夹时不同之处在需要用MultipartHttpServletRequest

@RequestMapping(value="/sys/uploadFolder",method=RequestMethod.POST)

@ResponseBody

public String uploadFileFolder(HttpServletRequest request)

{

MultipartHttpServletRequest params=((MultipartHttpServletRequest) request);

List<MultipartFile> files = params.getFiles("fileFolder");     //fileFolder为文件项的name值

String result = sysFilesUploadService.upload(files);

return"<h1>"+ result +"</h1>";

}

server端的包和类

f_post.jsp页面的处理逻辑

生成文件名称的逻辑

以下是service层做的处理:

@Service("sysFilesUploadService")

publicclass SysFilesUploadServiceImpl implements SysFilesUploadService {

//文件存储地址

@Value("${file_storage_address}")

private String Storage_PATH;

@Value("${file_format_require}")

private String File_Format;

@Override

public String upload(List<MultipartFile> files){

BufferedOutputStream bos =null;

BufferedInputStream bis=null;

//文件格式要求

String[] suffixArr = File_Format.split(",");

List<String> suffixList = Arrays.asList(suffixArr);

//判断存储的文件夹是否存在

File file=new File(Storage_PATH);

if(!file.exists()){file.mkdirs();}

try{

//遍历文件夹

for(MultipartFile mf : files){

if(!mf.isEmpty()){

String originalFilename = mf.getOriginalFilename();

String  suffix = originalFilename.substring(originalFilename.lastIndexOf(".")+1);

if(!suffixList.contains(suffix)){continue;}

String fileName=originalFilename.substring(originalFilename.lastIndexOf("/")+1);

int index = fileName.lastIndexOf(".");

String firstName=fileName.substring(0, index);

String lastName=fileName.substring(index);

fileName=firstName+"_"+System.currentTimeMillis()+lastName;

bis=new BufferedInputStream (mf.getInputStream());

bos=new BufferedOutputStream(new FileOutputStream

(Storage_PATH+fileName));

int len=0;

byte[] buffer=newbyte[10240];

while((len=bis.read(buffer))!=-1){ bos.write(buffer, 0, len);}

bos.flush();}

}

if(bis!=null){bis.close();}

if(bos!=null){bos.close();}

return"ok";

}catch(FileNotFoundException e){

e.printStackTrace();return"error";

}catch(IOException e){e.printStackTrace();return"error";}

}

}

后端代码逻辑大部分是相同的,目前能够支持MySQL,Oracle,SQL。在使用前需要配置一下数据库,可以参考我写的这篇文章:http://blog.ncmem.com/wordpress/2019/08/12/java-http%E5%A4%A7%E6%96%87%E4%BB%B6%E6%96%AD%E7%82%B9%E7%BB%AD%E4%BC%A0%E4%B8%8A%E4%BC%A0/

java+目录上传的更多相关文章

  1. 小兔Java教程 - 三分钟学会Java文件上传

    今天群里正好有人问起了Java文件上传的事情,本来这是Java里面的知识点,而我目前最主要的精力还是放在了JS的部分.不过反正也不麻烦,我就专门开一贴来聊聊Java文件上传的基本实现方法吧. 话不多说 ...

  2. java图片上传(mvc)

    最近有开始学起了java,好久没写文章了,好久没来博客园了.最近看了看博客园上次写的图片上传有很多人看,今天在一些篇关于java图片上传的.后台接收用的是mvc.不墨迹了,直接上图. 先看目录结构.i ...

  3. java压缩包上传,解压,预览(利用editor.md和Jstree实现)和下载

    java压缩包上传,解压,预览(利用editor.md和Jstree实现)和下载 实现功能:zip文件上传,后台自动解压,Jstree树目录(遍历文件),editor.md预览 采用Spring+Sp ...

  4. java ftp上传文件 工具类

    package com.learning.spboot.utils; import com.jcraft.jsch.*; import org.apache.commons.net.ftp.FTPCl ...

  5. Myeclipse10.7安装git插件并将Java项目上传到码云(github)

    注:本文来源:外匹夫的<Myeclipse10.7安装git插件并将Java项目上传到码云(github)> 一.先说说安装egit插件的步骤(安装egit不成功的原因主要是下载的egit ...

  6. 将linux上的Java代码上传到码云

    将linux上的Java代码上传到码云 1.在linux上直接输入命令获取git sudo apt-get install git 显示资源被占用,按照图中方法强制安装 2.建立与教材配套的目录结构 ...

  7. JAVA文件上传 ServletFileUpLoad 实例

    1.  jsp <%@ page language="java" contentType="text/html" pageEncoding="u ...

  8. Java SFTP 上传、下载等操作

    Java SFTP 上传.下载等操作 实际开发中用到了 SFTP 用于交换批量数据文件,然后琢磨了下这方面的东西,基于 JSch 写了个工具类记录下,便于日后使用. JSch是 SSH2 的纯Java ...

  9. 2013第38周日Java文件上传下载收集思考

    2013第38周日Java文件上传&下载收集思考 感觉文件上传及下载操作很常用,之前简单搜集过一些东西,没有及时学习总结,现在基本没啥印象了,今天就再次学习下,记录下自己目前知识背景下对该类问 ...

随机推荐

  1. vue-element-admin后台的安装

    # 克隆项目 git clone https://github.com/PanJiaChen/vue-element-admin.git # 进入项目目录 cd vue-element-admin # ...

  2. thymeleaf的内联th:inline(在javascript访问model中的数据)

    thymeleaf模板引擎为前端数据的获取提供了较大的便利,在html标签内可通过th标签加${}表达式访问model里的对象数据.但如果不想通过th标签而是简单地访问model对象数据,或是想在ja ...

  3. Maven编译指定(跳过)Module

    今天在项目里新添加了一个Module, 但是在jenkins编译的时候会将这个Module也编译, 问题是这个Module根本不需要编译而且巨慢. 因此我只想编译指定模块 ModuleA以及它依赖的必 ...

  4. jsp下拉列表

    <c:set var="REPORT_TYPE_NORMAL" value="<%=SysIndexFormTemp.REPORT_TYPE_NORMAL%& ...

  5. Python&Selenium借助HTMLTestRunner生成自动化测试报告

    一.摘要 本篇博文介绍Python和Selenium进行自动化测试时,借助著名的HTMLTestRunner生成自动化测试报告 HTMLTestRunner.py百度很多,版本也很多,自行搜索下载放到 ...

  6. Vue入门(二)——Demo

    1.在工程目录下创建项目 右键GIT BASH 2.安装lib(建议使用淘宝镜像安装) 3.首页 App.vue <template> <el-container> <e ...

  7. canvas drawImage图片不显示问题

    初次学习canvas,用来做笔记记录下遇到的问题及解决方案 这里是要将一张图片写到canvas里,按照网上搜索,初写了段代码,可是却没显示,以为是路径问题,不能跨域名使用,后来改为相对路径后,仍然无效 ...

  8. QT 设置应用程序图标和可执行程序图标

    1, 首先准备个ICO图标.例如:myappico.ico 在工程目录下新建images文件夹并你的图标myappico.ico(只能用ico格式的图片)放到工程目录下的images文件夹下 2, 用 ...

  9. Luogu P4781【模板】拉格朗日插值

    洛谷传送门 板题-注意一下求多个数的乘积的逆元不要一个个快速幂求逆元,那样很慢,时间复杂度就是O(n2log)O(n^2log)O(n2log).直接先乘起来最后求一次逆元就行了.时间复杂度为O(nl ...

  10. 最小安装的centos7下安装oracle 12c

    下载 oracal 安装包 进入https://www.oracle.com/index.html  依次选择-->Menu -->Downloads and trials -->D ...