javaweb:11.上传文件之目录打散

public class Upload3Servlet extends HttpServlet {

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");

/*
* 上传三步
*/
// 工厂
DiskFileItemFactory factory = new DiskFileItemFactory(20*1024, new File("d:/testdemo/temp"));
// 解析器
ServletFileUpload sfu = new ServletFileUpload(factory);
// sfu.setFileSizeMax(100 * 1024);//限制单个文件大小为100K
// sfu.setSizeMax(1024 * 1024);//限制整个表单大小为1M

// 解析,得到List
try {
List<FileItem> list = sfu.parseRequest(request);
FileItem fi = list.get(1);

//////////////////////////////////////////////////////

/*
* 1. 得到文件保存的路径
*/
String root = this.getServletContext().getRealPath("/WEB-INF/files/");
/*
* 2. 生成二层目录
* 1). 得到文件名称
* 2). 得到hashCode
* 3). 转发成16进制
* 4). 获取前二个字符用来生成目录
*/
String filename = fi.getName();//获取上传的文件名称
/*
* 处理文件名的绝对路径问题
*/
int index = filename.lastIndexOf("\\");
if(index != -1) {
filename = filename.substring(index+1);
}
/*
* 给文件名称添加uuid前缀,处理文件同名问题
*/
String savename = CommonUtils.uuid() + "_" + filename;

/*
* 1. 得到hashCode
*/
int hCode = filename.hashCode();
String hex = Integer.toHexString(hCode);

/*
* 2. 获取hex的前两个字母,与root连接在一起,生成一个完整的路径
*/
File dirFile = new File(root, hex.charAt(0) + "/" + hex.charAt(1));

/*
* 3. 创建目录链
*/
dirFile.mkdirs();

/*
* 4. 创建目录文件
*/
File destFile = new File(dirFile, savename);

/*
* 5. 保存
*/
fi.write(destFile);

///////////////////////////////////////////////////////

} catch (FileUploadException e) {
if(e instanceof FileUploadBase.FileSizeLimitExceededException) {
request.setAttribute("msg", "您上传的文件超出了100KB!");
request.getRequestDispatcher("/form3.jsp").forward(request, response);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP ‘form2.jsp‘ starting page</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->

</head>

<body>
<h1>上传3</h1>
<h3>${msg }</h3>
<form action="<c:url value=‘/Upload3Servlet‘/>" method="post" enctype="multipart/form-data">
用户名;<input type="text" name="username"/><br/>
照 片:<input type="file" name="zhaoPian"/><br/>
<input type="submit" value="上传"/>
</form>
</body>
</html>

原文地址:https://www.cnblogs.com/oycq9999/p/10330396.html

时间: 2024-10-13 00:09:03

javaweb:11.上传文件之目录打散的相关文章

JavaWeb实现上传文件

需要 commons-io与commons-fileupload 首先在jsp中创建一下布局 <%@ page contentType="text/html;charset=UTF-8" language="java"%> <html> <head> <title>$Title$</title> </head> <body> <form action="MyServl

python paramiko 多线程批量执行指令及批量上传文件和目录

源代码: https://github.com/jy1779/be.git 环境需求: 1.python3 2.paramiko pip install --upgrade pip apt-get install libssl-dev pip3 install paramiko 3.执行权限 chmod +x becmd.py ln -s /root/be/bin/becmd.py /usr/local/sbin/becmd chmod +x besync.py ln -s /root/be/b

android 上传文件到服务器

Android客户端 package com.example.testandroid;   import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL;   import android.app.Activity; import android.app.Alert

Java 网络编程案例三:多个客户端上传文件

需求:每一个客户端启动后都可以给服务器上传一个文件,服务器接收到文件后保存到一个upload目录中.可以同时接收多个客户端的文件上传. 分析: (1)服务器端要“同时”处理多个客户端的请求,那么必须使用多线程,每一个客户端的通信需要单独的线程来处理. (2)服务器保存上传文件的目录只有一个upload,而每个客户端给服务器发送的文件可能重名,所以需要保证文件名的唯一.我们可以使用“时间戳”作为文件名,而后缀名不变 (3)客户端需要给服务器上传文件名(含后缀名)以及文件内容.而文件名是字符串,文件

前端js上传文件 到后端接收文件

下面是前端js代码: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>File upload</title> </head> <body> <!-- // action="fileupload"对应web.xml中<se

ubuntu 搭建ftp服务器,可以通过浏览器访问,filezilla上传文件等功能

搭建ftp服务器 1:首先,更新软件源,保证源是最新的,这样有利于下面在线通过apt-get install命令安装ftp. 2:使用sudo apt-get install vsftp命令安装vsftp,安装软件需要root权限,我们使用sudo来暂时获取. 3:安装好ftp后默认是会自动创建ftp用户的,然后我们设置ftp用户的密码,输入 4:sudo passwd ftp,然后输入密码,再确认密码. 为 ftp用户创建的目录 默认为/srv/ftp 5:对/etc/vsftpd.conf配

springboot 项目打包部署后设置上传文件访问的绝对路径

1.设置绝对路径 application.properties的配置 #静态资源对外暴露的访问路径 file.staticAccessPath=/upload/** #文件上传目录(注意Linux和Windows上的目录结构不同) #file.uploadFolder=/home/upload/ file.uploadFolder=d://upload/ 配置上传文件的目录,也可以在这里设置上传文件的大小 @Configuration public class UploadFileConfig

jmeter随笔(11)--上传文件接口出错

点击标题下「飞测」可快速关注 坚持的是分享,搬运的是知识,图的是大家的进步,没有收费的培训,没有虚度的吹水,喜欢就关注.转发(免费帮助更多伙伴)等来交流,想了解的知识请留言,给你带来更多价值,是我们期待的方向,有更多兴趣的欢迎切磋,我们微信订阅号,联系方式如下: 背景说明 坚持分享,坚持总结,技术需要时间的积累和练习,对jmeter实践的点滴的记录,这里分享交流jmeter的第11次小技巧,仅供参考和讨论,有想法的欢迎留言.谈论,手机上图片如果不清晰,请点击[阅读原文]查看. 1问题:一个导入文

关于JavaWeb不使用框架上传文件的简单实现

好像最低支持3.0的JavaWeb项目: 前台页面代码: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="GBK"> 5 <title>测试上传</title> 6 </head> 7 <body> 8 <form action="/fileup/upTest" enctype="multipart