java上传与下载文件_java实现文件的上传和下载功能
准备工作
(视频教程推荐:java课程)
需要导入的jar包
运行截图
文件上传截图
文件下载截图
上传文件代码servlet@WebServlet(name = "UploadServlet",value = "/upload")
@MultipartConfig(maxFileSize = 1024*1024*5,maxRequestSize = 1024*1024*20) //1 添加MultipartConfig注解
public class UploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//存放文件的目录
String realPath = request.getServletContext().getRealPath("/WEB-INF/upload");
File dir=new File(realPath);
if(!dir.exists()){
dir.mkdirs();
}
List allowExts=new ArrayList();
allowExts.add("jpg");
allowExts.add("png");
allowExts.add("gif");
//1乱码
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//2使用getParts()获取数据
Collection parts = request.getParts();
//3遍历
PrintWriter out = response.getWriter();
if(parts!=null&&parts.size()>0){
for (Part part : parts) {
//判断表单元素是普通字段,还是文件
String submittedFileName = part.getSubmittedFileName();
if(submittedFileName==null){//普通字段
String name = part.getName();
String value = request.getParameter(name);
System.out.println(name+"..."+value);
}else{//文件
//判断文件是否为""
if(submittedFileName.equals("")){
continue;
}
//System.out.println(submittedFileName);
//从请求头中获取文件
String dis = part.getHeader("content-disposition");
String filename=dis.substring(dis.lastIndexOf("filename=")+10, dis.length()-1);
filename=filename.substring(filename.lastIndexOf("\\")+1);
System.out.println(filename);
//获取文件名的后缀
String ext=filename.substring(filename.lastIndexOf(".")+1);
if(!allowExts.contains(ext)){
out.println(filename+"不符合上传文件类型要求...");
continue;
}
//把文件保存
//1创建新的文件名
String newFileName = UploadUtils.makeNewFileName(filename);
//2创建新的路径
String newPath = UploadUtils.makeNewPath(realPath, filename);
part.write(newPath+File.separator+newFileName);
//删除part
part.delete();
out.println("上传成功:"+filename);
}
}
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
每个属性表示的内容
文件下载代码servlet@WebServlet(name = "DownLoadServlet",value = "/download")
public class DownLoadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//乱码
request.setCharacterEncoding("utf-8");
//获取文件名
String uuidFilename = request.getParameter("filename");//d578be74fd864ac2a879d77b07f13793_backg.jpg
//去掉uuid
String filename=uuidFilename.substring(uuidFilename.indexOf("_")+1);
//存放文件的根路径
String realPath = request.getServletContext().getRealPath("/WEB-INF/upload");
//获取真正目录
String path = UploadUtils.makeNewPath(realPath, filename);
File file=new File(path+ File.separator+uuidFilename);
if(file.exists()){
response.setHeader("content-disposition", "attachment;filename="+ URLEncoder.encode(filename, "utf-8"));
ServletOutputStream os = response.getOutputStream();
FileInputStream fis=new FileInputStream(file);
byte[] buf=new byte[1024*4];
int len=0;
while((len=fis.read(buf))!=-1){
os.write(buf,0,len);
}
}else{
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("文件不存在...");
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
每个属性表示的内容
读取下载文件servlet@WebServlet(name = "ListFileServlet",value = "/listfile")
public class ListFileServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1读取可以被下载的文件
String realPath = request.getServletContext().getRealPath("/WEB-INF/upload");
HashMap map=new HashMap<>();
UploadUtils.listFile(new File(realPath),map);
//2放入域中
request.setAttribute("map", map);
//3转发
request.getRequestDispatcher("/list.jsp").forward(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
工具类servletpublic class UploadUtils {
public static void main(String[] args) {
String s = makeNewFileName("aaa.jpg");
System.out.println(s);
}
/**
* 根据原始文件名产生一个新的文件名
* @param filename
* @return
*/
public static String makeNewFileName(String filename){
//UUID 统一唯一标识码
String uuid = UUID.randomUUID().toString().replace("-", "");//默认32位的16进制
return uuid+"_"+filename;
}
/**
* 创建新的路径
* @param path
* @param filename
* @return
*/
public static String makeNewPath(String path,String filename){
int num = filename.hashCode();//01101011001011011111111111 1111 0101 0101
int path1=num&0xf;
int path2=(num>>4)&0xf;
String newPath=path+ File.separator+path1+File.separator+path2;
File dir=new File(newPath);
if(!dir.exists()){
dir.mkdirs();
}
return newPath;
}
//遍历可以被下载的文件
public static void listFile(File dir,HashMap map){
File[] files = dir.listFiles();
if(files!=null&&files.length>0){
for (File file : files) {
if(file.isDirectory()){
listFile(file, map);
}else{
//文件
String uuidFilename=file.getName();
String filename=uuidFilename.substring(uuidFilename.indexOf("_")+1);
map.put(uuidFilename,filename);
}
}
}
}
}
java上传与下载文件_java实现文件的上传和下载功能相关推荐
- java中上传文件_Java中文件上传下载 --使用Minio
Minio模板类: @RequiredArgsConstructor public class MinioTemplate implements InitializingBean { private ...
- java上传大文件_Java超大文件上传解决办法
这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数 下面直接贴代码吧,一些难懂的我大部分都加上注释了: 上传文件实体类: 看得 ...
- java多线程上传文件_Java大文件分片上传/多线程上传
这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数 下面直接贴代码吧,一些难懂的我大部分都加上注释了: 上传文件实体类: 看得 ...
- java action上传文件_java实现文件上传
在Java中,要实现文件上传,可以有两种方式: 1.通过Servlet类上传 2.通过Struts框架实现上传 这两种方式的根本还是通过Servlet进行IO流的操作. 一.通过Servlet类上传 ...
- java json上传文件_java实现文件上传
最近自己在做一个小系统玩的时候涉及到了文件的上传,于是在网上找到Java上传文件的方案,最后确定使用common-fileupload实现上传操作. 需求说明 用户添加页面有一个"上传&qu ...
- minio获取上传文件_Java中文件上传下载 --使用Minio
Minio模板类: @RequiredArgsConstructor public class MinioTemplate implements InitializingBean { private ...
- java实现下载压缩文件_java实现文件压缩下载----压缩下载zip
文件压缩下载 Controller层: /** *文件压缩下载 *billname:文件名 *filename:文件存放路径 */ public void downloadsource(HttpSer ...
- java用浏览器下载文件_JAVA读取文件流,设置浏览器下载或直接预览操作
最近项目需要在浏览器中通过url预览图片.但发现浏览器始终默认下载,而不是预览.研究了一下,发现了问题: // 设置response的header,注意这句,如果开启,默认浏览器会进行下载操作,如果注 ...
- java浏览器预览文件_JAVA读取文件流,设置浏览器下载或直接预览操作
最近项目需要在浏览器中通过URL预览图片.但发现浏览器始终默认下载,而不是预览.研究了一下,发现了问题: // 设置response的Header,注意这句,如果开启,默认浏览器会进行下载操作,如果注 ...
- java 判断是否为cst格式_Java判断文件编码格式
1:简单判断是UTF-8或不是UTF-8,因为一般除了UTF-8之外就是GBK,所以就设置默认为GBK. 按照给定的字符集存储文件时,在文件的最开头的三个字节中就有可能存储着编码信息,所以,基本的原理 ...
最新文章
- 高并发MPP查询引擎Impala初识
- 自动驾驶公司 | 纽劢科技与黑芝麻智能战略合作,共推自动驾驶量产落地
- web前端开发基础知识_前端开发是什么?学前端开发需要学什么语言?你想成为程序员吗?...
- C++ Vectors
- ssh登录 The authenticity of host 192.168.0.xxx can't be established. 的问题
- 由软件工程看中国人急功近利的心态
- 两部门:解除蒙古国部分地区口蹄疫疫情禁令
- Elman神经网络原理
- 黑苹果 声卡驱动 ID注入
- 分门别类总结Java中的各种锁,让你彻底记住
- Element UI 自定义动态换肤(主题)
- 巴西-跨境电商蓝海市场
- python面试题 网络编程和并发(34道题)
- android 高德地图 lbstraceclient,安卓高德地图定位篇-(1)
- 国考省考申论:2次阅读法:1读感知材料类型和段落关系,2读根据问题词,原因词,影响词,对策词,关联词把握得分要点
- 医疗手术机器人 双目视觉导航方式产品汇总
- 卡西欧科学计算机玩法,巨好玩:计算器CASIO(卡西欧)新玩法
- 驼峰命名法与下划线命名法之争
- 面对音乐行业解决音乐侵权严重痛点:启动数字化转型的设计思维工作坊
- Adapter(适配器)模式总结
热门文章
- 使用postman创建Marketing Cloud的Contact
- 解析word template返回使用的webservice WSDL和Operation
- CRM and S4 Fiori UI coexistence
- 总共4行代码使用fastxml.json实现Java对象的序列化和反序列化
- Java实现的有道云笔记图片批量下载工具
- 透过率和反射率的关系_全国本科率只有不到百分之五?!醒醒吧!
- python的回收机制_Python垃圾回收机制【人生苦短,我用python】-阿里云开发者社区...
- java多线程并发控制_Java多线程与并发控制
- python中print怎么用_python的print怎么用
- hadoop3.2.1和java1.7版本不兼容解决方案(virtualBox下ubuntu环境linux系统)