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

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

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. Linux磁盘及文件系统管理2

    创建文件系统: 格式化:低级格式化(分区之前进行,划分磁道).高级格式化(分区之后对分区进行,创建文件系统) 元数据区,数据区 元数据区: 文件元数据:inode(index node) 大小.权限. ...

  2. SQLite3学习笔记(2)

      SQLite 创建表 SQLite 的CREATE TABLE 语句用于在任何指定的数据库创建一个新表. 创建新表,涉及到命名表.定义列及每一行的数据类型. CREATE TABLE 的基本语法如 ...

  3. 牛客小白月赛19 E 「火」烈火燎原 (思维,树)

    牛客小白月赛19 E 「火」烈火燎原 (思维,树) 链接:https://ac.nowcoder.com/acm/contest/2272/E来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空 ...

  4. pip报错以及指向错误

    在终端中输入无论是pip3 -V或是pip -V都指向python3 如下图所示: 然后在卸载或更新pip 时都出现了报错: 就是卸载也卸不了更新也更不了 解决报错: Traceback (most ...

  5. mybatis分页未明确的列定义

    问题出现原因是 集成mybaits时 会自动加上 select tmp_page.*, rownum row_id from ( abc )tmp_page 我的问题是 abc区域的列名有重名的,保持 ...

  6. setup elk with docker-compose

    version: '2' services: elasticsearch: image: docker.calix.local:18080/docker-elasticsearch:6.2.2-1 c ...

  7. [jenkins] 启动错误 Failed to start LSB: Jenkins Automation Server.

    解决办法见https://blog.csdn.net/qq_34208844/article/details/87865672

  8. could not load file or assembly "System.Web.Mvc...

    1.一般出现这个错误是因为Web.Config里面的版本号跟project用到的dll版本对应不上 更改webconfig <add assembly="System.Web.Mvc, ...

  9. 小米oj 不要乱改代码(并查集)

     不要乱改代码 序号:#91难度:非常难时间限制:2000ms内存限制:50M 描述 最近小米公司内爆发了一种名叫"瞎改我代码就会死"的传染病. 传播方式是只要与染病者共同编辑过一 ...

  10. 树莓派安装alsa-lib库

    安装alsa-lib库 apt-get install libasound2-dev dpkg -L libasound2-dev 参考:https://blog.csdn.net/happygril ...