准备工作

(视频教程推荐: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实现文件的上传和下载功能相关推荐

  1. java中上传文件_Java中文件上传下载 --使用Minio

    Minio模板类: @RequiredArgsConstructor public class MinioTemplate implements InitializingBean { private ...

  2. java上传大文件_Java超大文件上传解决办法

    这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数 下面直接贴代码吧,一些难懂的我大部分都加上注释了: 上传文件实体类: 看得 ...

  3. java多线程上传文件_Java大文件分片上传/多线程上传

    这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数 下面直接贴代码吧,一些难懂的我大部分都加上注释了: 上传文件实体类: 看得 ...

  4. java action上传文件_java实现文件上传

    在Java中,要实现文件上传,可以有两种方式: 1.通过Servlet类上传 2.通过Struts框架实现上传 这两种方式的根本还是通过Servlet进行IO流的操作. 一.通过Servlet类上传 ...

  5. java json上传文件_java实现文件上传

    最近自己在做一个小系统玩的时候涉及到了文件的上传,于是在网上找到Java上传文件的方案,最后确定使用common-fileupload实现上传操作. 需求说明 用户添加页面有一个"上传&qu ...

  6. minio获取上传文件_Java中文件上传下载 --使用Minio

    Minio模板类: @RequiredArgsConstructor public class MinioTemplate implements InitializingBean { private ...

  7. java实现下载压缩文件_java实现文件压缩下载----压缩下载zip

    文件压缩下载 Controller层: /** *文件压缩下载 *billname:文件名 *filename:文件存放路径 */ public void downloadsource(HttpSer ...

  8. java用浏览器下载文件_JAVA读取文件流,设置浏览器下载或直接预览操作

    最近项目需要在浏览器中通过url预览图片.但发现浏览器始终默认下载,而不是预览.研究了一下,发现了问题: // 设置response的header,注意这句,如果开启,默认浏览器会进行下载操作,如果注 ...

  9. java浏览器预览文件_JAVA读取文件流,设置浏览器下载或直接预览操作

    最近项目需要在浏览器中通过URL预览图片.但发现浏览器始终默认下载,而不是预览.研究了一下,发现了问题: // 设置response的Header,注意这句,如果开启,默认浏览器会进行下载操作,如果注 ...

  10. java 判断是否为cst格式_Java判断文件编码格式

    1:简单判断是UTF-8或不是UTF-8,因为一般除了UTF-8之外就是GBK,所以就设置默认为GBK. 按照给定的字符集存储文件时,在文件的最开头的三个字节中就有可能存储着编码信息,所以,基本的原理 ...

最新文章

  1. 高并发MPP查询引擎Impala初识
  2. 自动驾驶公司 | 纽劢科技与黑芝麻智能战略合作,共推自动驾驶量产落地
  3. web前端开发基础知识_前端开发是什么?学前端开发需要学什么语言?你想成为程序员吗?...
  4. C++ Vectors
  5. ssh登录 The authenticity of host 192.168.0.xxx can't be established. 的问题
  6. 由软件工程看中国人急功近利的心态
  7. 两部门:解除蒙古国部分地区口蹄疫疫情禁令
  8. Elman神经网络原理
  9. 黑苹果 声卡驱动 ID注入
  10. 分门别类总结Java中的各种锁,让你彻底记住
  11. Element UI 自定义动态换肤(主题)
  12. 巴西-跨境电商蓝海市场
  13. python面试题 网络编程和并发(34道题)
  14. android 高德地图 lbstraceclient,安卓高德地图定位篇-(1)
  15. 国考省考申论:2次阅读法:1读感知材料类型和段落关系,2读根据问题词,原因词,影响词,对策词,关联词把握得分要点
  16. 医疗手术机器人 双目视觉导航方式产品汇总
  17. 卡西欧科学计算机玩法,巨好玩:计算器CASIO(卡西欧)新玩法
  18. 驼峰命名法与下划线命名法之争
  19. 面对音乐行业解决音乐侵权严重痛点:启动数字化转型的设计思维工作坊
  20. Adapter(适配器)模式总结

热门文章

  1. 使用postman创建Marketing Cloud的Contact
  2. 解析word template返回使用的webservice WSDL和Operation
  3. CRM and S4 Fiori UI coexistence
  4. 总共4行代码使用fastxml.json实现Java对象的序列化和反序列化
  5. Java实现的有道云笔记图片批量下载工具
  6. 透过率和反射率的关系_全国本科率只有不到百分之五?!醒醒吧!
  7. python的回收机制_Python垃圾回收机制【人生苦短,我用python】-阿里云开发者社区...
  8. java多线程并发控制_Java多线程与并发控制
  9. python中print怎么用_python的print怎么用
  10. hadoop3.2.1和java1.7版本不兼容解决方案(virtualBox下ubuntu环境linux系统)