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

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

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. linux-2.6.38 input子系统(简析)

    一.输入子系统简介 引入输入子系统这种机制可以对不同的输入设备进行管理.各种输入设备如:鼠标.键盘.触摸屏等有一套相同的处理机制,输入子系统将其共性提取出来, 对于驱动开发人员只用实现其差异即可,实现 ...

  2. 类的命名空间与卸载详解及jvisualvm使用

    类的命名空间详解: 在上一次[https://www.cnblogs.com/webor2006/p/9108301.html]最后实验中有一个违背咱们理解的,这里回顾一下: 也就是说,"某 ...

  3. jvm crash分析

    问题描述:线上进程异常退出,查看服务器端日志,有jvm crash文件生成 # # A fatal error has been detected by the Java Runtime Enviro ...

  4. 洛谷P1280 尼克的任务【线性dp】

    题目:https://www.luogu.org/problemnew/show/P1280 题意: 给定k个任务的开始时间和持续时间要求在n时间内完成.问如何安排工作使得休息时间最多. 思路: 用d ...

  5. BZOJ 4522: [Cqoi2016]密钥破解 (Pollard-Rho板题)

    Pollard-Rho 模板 板题-没啥说的- 求逆元出来后如果是负的记得加回正数 CODE #include<bits/stdc++.h> using namespace std; ty ...

  6. ibatis查询列表跟总记录,都引用相同SQL

    在查询记录集合跟查询记录总记录数的时候,我们需要所写的SQL要一样,那么可以都引用同一个SQL.写法如下: <sqlMap namespace="Server"> &l ...

  7. access denied

    背景: 想要使用nginx转发 实现一个输出PHPinfo的页面, 比如: 访问  aaa.com/phpinfo  浏览器显示phpinfo的信息, 因为有的时候需要查看phpinfo, 所以想单独 ...

  8. 南京IT公司

    公司 (排名不分前后,有好的公司可以@我,及时更新) 1.中兴软创 http://www.ztesoft.com/cn/index.html 2.华为 http://www.huawei.com/cn ...

  9. 宝塔apache设置泛目录的反向代理/莲花泛目录

    反向解析目标站-泛目录站一般用ip或者ip:端口来搭建,这样可以节省一个域名,当然也可以用域名,看个人爱好.主站和泛站可以同一个服务器和可以不同服务器,看个人实际情况.先来看宝塔的反向代理的步骤:点击 ...

  10. 使用python播放音乐

    1.首先安装pygame,pip install pygame 2.上代码: import time import pygame #音乐路径 filepath=r"C:\Users\1473 ...