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

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

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文件夹上传下载组件

    核心原理: 该项目核心就是文件分块上传.前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题. * 如何分片: * 如何合成一个文件: * 中断了从哪个分片开 ...

  2. java文件夹上传下载控件分享

    用过浏览器的开发人员都对大文件上传与下载比较困扰,之前遇到了一个需要在JAVA.MyEclipse环境下大文件上传的问题,无奈之下自己开发了一套文件上传控件,在这里分享一下.希望能对你有所帮助. 以下 ...

  3. Java Web 项目的文件/文件夹上传下载

    需求: 支持大文件批量上传(20G)和下载,同时需要保证上传期间用户电脑不出现卡死等体验: 内网百兆网络上传速度为12MB/S 服务器内存占用低 支持文件夹上传,文件夹中的文件数量达到1万个以上,且包 ...

  4. java web 实现文件夹上传(保留目录结构)

    今天我弄了一下文件夹上传(很简单的 首先,我们的html需要这样写 <form action="/file/upload" enctype="multipart/f ...

  5. java+http文件夹上传

    在web项目中上传文件夹现在已经成为了一个主流的需求.在OA,或者企业ERP系统中都有类似的需求.上传文件夹并且保留层级结构能够对用户行成很好的引导,用户使用起来也更方便.能够提供更高级的应用支撑. ...

  6. 文件夹上传插件webupload插件

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 先说下要求: PC端全平台支持,要求支持Windows,Mac,Linux 支持所 ...

  7. 文件夹上传控件webupload插件

    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 这次项目的需求: 支持大文件的上传和续传,要求续传支持所有浏览器,包括ie6,ie7,i ...

  8. Web 项目的文件/文件夹上传下载

    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 这次项目的需求: 支持大文件的上传和续传,要求续传支持所有浏览器,包括ie6,ie7,i ...

  9. webuploader+文件夹上传

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 先说下要求: PC端全平台支持,要求支持Windows,Mac,Linux 支持所 ...

随机推荐

  1. Struts2自定义标签重写(转)

    TagSupport的学习 1 TagSupport与BodyTagSupport的区别 TagSupport与BodyTagSupport的区别主要是标签处理类是否需要与标签体交互,如果不需要交互的 ...

  2. mysql 数据库常见的一些基本操作 !详不详细你说了算!

    在日常应用中可能一时想不起来,所以有必要整理一份 指令相关的笔记,以是个人比较满意,也比较全面的一份笔记,希望能帮到你,适用初级小白,大神可略过! MYSQL常用命令: 数据备份与还原·注意:不要打分 ...

  3. Python 实现快递查询

    实现效果: 源代码: import urllib.request import json import msvcrt kd_dict = {1:'shentong',2:'youzhengguonei ...

  4. Java&Selenium自动化测试之数据驱动

    一.摘要 本片博文以四个方式展示自动化测试的数据驱动,数组.CSV.Excel.Mysql 二.TestNG&Csv&Driven package testNGWithDataDriv ...

  5. 【Java基础 项目实例 -- Bank项目2】Account 和 customer 对象

    总结: customer.setAccount(account); //引用,日后的account 和 customer.getAccount()的结果始终一致 实验目的 扩展银行项目,添加一个 Cu ...

  6. EasyUi Datagrid中footer renderFooter

    默认的'rowStyler' 选项不支持footer,想让footer支持rowStyler的话,dategird就得重写.代码如下. var myview = $.extend({}, $.fn.d ...

  7. Mysql中用exists代替in

         exists对外表用loop逐条查询,每次查询都会查看exists的条件语句,当 exists里的条件语句能够返回记录行时(无论记录行是的多少,只要能返回),条件就为真,返回当前loop到的 ...

  8. CodeForces 835D - Palindromic characteristics | Codeforces Round #427 (Div. 2)

    证明在Tutorial的评论版里 /* CodeForces 835D - Palindromic characteristics [ 分析,DP ] | Codeforces Round #427 ...

  9. 分布式协调框架_Zookeeper

    Zookeeper 如今在分布式架构中应用十分广泛,它作为分布式协调框架在分布式架构中有着举足轻重的地位,本文是主要从以上几个方面对 Zookeeper 常用的知识进行总结. 一 从集中式到分布式架构 ...

  10. 洛谷 P1706 全排列

    可能是最简单的题了……讲真搜索hhh 洛谷 P1706 全排列问题 题目描述 输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字. 输入输出格式 输入格式: ...