上传:

前端页面:


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>file_up_test</title><style type="text/css">#main {margin: 200px auto auto 200px;}</style>
</head>
<body>
<%--enctype:--%>
<%--1.application/x-www-form-urlencoded(默认)--%>
<%--2.multipart/form-data(二进制编码)--%>
<%--注意:使用二进制编码后Servlet无法使用req.getParam来获取参数--%>
<form action="${pageContext.request.contextPath}/FileUpTest" method="post" enctype="multipart/form-data"><div id="main"><div>选择用户名:<select id="selUser" name="userName" style="width: 120px; height: 30px"><option value="1">kobe</option><option value="2">james</option></select></div><br/><div>选择文件:<%--这个约束没什么用--%><input type="file" id="fileUp" name="fileUp" multiple="multiple" accept="image/*"style="width: 300px; height: 30px"/></div><br/><div><input type="submit" value="提交" style="width: 120px; height: 30px"/></div></div></form>
</body>
</html>

后台代码:

package com.study.jsp.test;import com.jdbc.library.common.FileUpUtil;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.*;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;@WebServlet("/FileUpTest")
public class FileUpTestServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("UTF-8");resp.setContentType("text/html;charset=UTF-8");boolean isFileForm = ServletFileUpload.isMultipartContent(req);if (!isFileForm) {return;}FileUpUtil fileUpUtil = new FileUpUtil(req);//保存文件saveFile(req, fileUpUtil);//获取参数Map<String, String> paraMap = fileUpUtil.getFormPara();String userName = paraMap.get("userName");resp.getWriter().write(userName);}/*** 关于上传文件*/private void aboutFile(HttpServletRequest req) {try {/*********************一.唯一标识**************************///1.唯一标识1String dateStr = new SimpleDateFormat("yyyyMMddHHmmsssss").format(new Date());//2.唯一标识2//String uuId = UUID.randomUUID().toString();// (例如:美女.jsp)//3.唯一标识3//long milSeconds = new Date().getTime();/*********************二.文件扩展名**************************///1.获取文件扩展名String fileName = "美女.jpg";//美女.jpgString name = FilenameUtils.getName(fileName);//美女String baseName = FilenameUtils.getBaseName(fileName);//jpgString extenName = FilenameUtils.getExtension(fileName);//美女.jpgString fullName = FilenameUtils.getFullPath(fileName);/*******************三.缓存大小和临时目录**************************/DiskFileItemFactory factory = new DiskFileItemFactory();//1.设置缓存大小(单位:字节 默认大小:10240字节=10kb)factory.setSizeThreshold(1024 * 1024 * 10);//10兆//2.设置临时目录(不建议更改)factory.setRepository(new File(""));/*******************四.文件大小限制**************************/ServletFileUpload fileUpload = new ServletFileUpload(factory);//1.单个上传文件大小(单位:字节 默认大小:2097152字节=2兆)fileUpload.setFileSizeMax(1024 * 1024 * 10);//10兆//2.一次完整请求的所有上传数据+文件大小fileUpload.setSizeMax(1024 * 1024 * 20);//20兆} catch (Exception ex) {}}/*** 保存文件** @param req*/private void saveFile(HttpServletRequest req, FileUpUtil fileUpUtil) {//1.唯一标识1String dateStr = new SimpleDateFormat("yyyyMMddHHmmsssss").format(new Date());String dirStr = "/upload/" + dateStr + "";// (不可用)获取的是磁盘根目录的绝对路径(D:/img/1234565555)// String xDirPath = dir.getAbsolutePath();// (可用)获取的是web文件夹下面的绝对路径(D:/img/1234565555)String xDirPath = req.getServletContext().getRealPath(dirStr);File dir = new File(xDirPath);if (!dir.exists()) {dir.mkdirs();}fileUpUtil.saveFormFile(xDirPath, "");}
}
package com.jdbc.library.common;import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class FileUpUtil {private HttpServletRequest _res;private DiskFileItemFactory _factory;private ServletFileUpload _fileUpload;private Map<String, String> _paraMap = new HashMap<String, String>();public FileUpUtil(HttpServletRequest res) {_res = res;_factory = new DiskFileItemFactory();_fileUpload = new ServletFileUpload(_factory);}/*** 保存上传文件到本地** @param xDirPath  文件绝对路径(不包含文件名)* @param xFileName 文件名(图片.JPG)*/public void saveFormFile(String xDirPath, String xFileName) {try {List<FileItem> fileItemList = _fileUpload.parseRequest(_res);for (FileItem fileItem : fileItemList) {//是否存储在内存中fileItem.isInMemory();//找到文件类型参数if (!fileItem.isFormField()) {String fileName = xFileName.length() > 0 ? xFileName : fileItem.getName();String absoluRootPath = xDirPath.length() > 0 ? xDirPath : _res.getServletContext().getRealPath(_res.getServletContext().getInitParameter("FileUpPath"));String path = absoluRootPath + "/" + fileName;fileItem.write(new File(path));} else {String paraName = fileItem.getFieldName();String paraVal = fileItem.getString();_paraMap.put(paraName, paraVal);}}} catch (Exception e) {e.printStackTrace();}}/*** 获取所有参数名和参数值(除去file类型参数)** @return*/public Map<String, String> getFormPara() {return _paraMap;}}

下载:

前端页面:


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>file_download</title>
</head>
<body><%--GET请求:后台验证--%>
<%--<a href="${pageContext.request.contextPath}/FileDownTest?fileName=测试.jpg">点击下载</a>--%><%--POST请求:后台验证--%>
<form action="${pageContext.request.contextPath}/FileDownTest"><img src="${pageContext.request.contextPath}/upload/测试.jpg" width="200"height="200"/><%--无法保证下载安全--%><%--<a href="${pageContext.request.contextPath}/img/测试.jpg">点击下载</a>--%><input type="hidden" name="fileName" value="测试.jpg"/><input type="submit" value="点击下载" style="width:120px; height: 30px"/>
</form>
</body>
</html>

后台代码:

package com.study.jsp.test;import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.file.Files;
import java.nio.file.Paths;@WebServlet("/FileDownTest")
public class FileDownTestServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//GET请求设置Server.xml的Connector//POST请求设置req.setCharacterEncoding("UTF-8");String fileName = req.getParameter("fileName");if(fileName==null||"".equals(fileName)){return;}//GET请求不需要二次编码,POST请求需要二次编码fileName = req.getMethod().toLowerCase().equals("get") ? fileName : new String(fileName.getBytes("ISO-8859-1"), "utf-8");//找到资源的位置,读取到内存,响应给浏览器:String realPath = super.getServletContext().getRealPath(super.getServletContext().getInitParameter("FileDownPath"));String filePath = realPath + "\\" + fileName;ServletOutputStream out = resp.getOutputStream();//设置响应头resp.setContentType("application/x-msdownload");//获取请求头信息Use-AgentString userAgent = req.getHeader("User-Agent");if (userAgent.contains("MSIE")) {//IEfileName = URLEncoder.encode(fileName, "UTF-8");} else {//非IEfileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");}//设置下载的文件名称resp.setHeader("Content-Disposition", "attachment;fileName=" + fileName);//将数据响应到浏览器Files.copy(Paths.get(filePath), out);}
}

Java中Jsp和Servlet上传和下载文件相关推荐

  1. 如何在命令行中使用 ftp 命令上传和下载文件

    转摘:https://linux.cn/article-6746-1.html 本文中,介绍在 Linux shell 中如何使用 ftp 命令.包括如何连接 FTP 服务器,上传或下载文件以及创建文 ...

  2. Java网络编程入门,包含网络相关概念、InetAddress类、套接字Socket、网络上传和下载文件等

    Java学习-11-韩顺平老师 Java-网络编程入门 目录: 01-网络相关概念 02-InetAddress类 03-套接字Socket 04-网络上传和下载文件 05-UDP网络编程 网络编程相 ...

  3. java http 下载文件_JAVA通过HttpURLConnection 上传和下载文件的方法

    本文介绍了JAVA通过HttpURLConnection 上传和下载文件的方法,分享给大家,具体如下: HttpURLConnection文件上传 HttpURLConnection采用模拟浏览器上传 ...

  4. 如何在Linux中使用sFTP上传或下载文件与文件夹

    如何在Linux中使用sFTP上传或下载文件与文件夹 sFTP(安全文件传输程序)是一种安全的交互式文件传输程序,其工作方式与 FTP(文件传输协议)类似. 然而,sFTP 比 FTP 更安全;它通过 ...

  5. Linux中使用SCP命令进行上传或者下载文件

    本文目录 1.本地主机与远程主机之间进行文件传输 1.1.单个文件的上传与下载 1.2.多个文件的上传与下载 1.3.按目录进行上传与下载 2.远程主机与远程主机之间进行文件传输 SCP(Secure ...

  6. springboot传入json和文件_Spring Boot之 Controller 接收参数和返回数据总结(包括上传、下载文件)...

    server: port: 8088 servlet: context-path: /sid spring: mvc: view: prefix: / suffix: .html /** * 返回界面 ...

  7. EasyExcel+elementUI+vue 上传、下载文件实例

    本文为 easyexcel使用具体实例,包含前后端代码,前端使用 vue + elementUI+axios,后端使用 spring boot. 1. 上传文件 1.1. 后端 1.1.1. 添加依赖 ...

  8. windows主机用scp命令向Linux服务器上传和下载文件

    windows主机用scp命令向Linux服务器上传和下载文件 文章目录: 一.scp介绍 二.scp上传和下载 1.上传 2.下载 三.scp的更多参数 一.scp介绍 scp是secure cop ...

  9. 利用SecureCRT上传、下载文件(使用sz与rz命令)

    利用SecureCRT上传.下载文件(使用sz与rz命令) 借助securtCRT,使用linux命令sz可以很方便的将服务器上的文件下载到本地,使用rz命令则是把本地文件上传到服务器. 其中,对于s ...

最新文章

  1. 基于Sql Server 2008的分布式数据库的实践(一)
  2. java中thread实例_Java多线程2:Thread中的实例方法
  3. 修改应用程序图标(csdn貌似还没有直接从机器码谈起的文章)
  4. C++ Fermat‘s little theorem费马小定理寻找模逆实现算法(附完整源码)
  5. 如何通过SQL按内容拆分字段(将一个字段值拆分两个字段)
  6. 经典面试题(4):use strict 有什么意义和好处?
  7. php 上一页 下一页代码,php无限上一页,下一页,求完善代码??
  8. Linux学习之源码2:start_kernel流程
  9. 计算机基础——局域网、以太网技术、令牌环网
  10. ajax中GET和POST区别
  11. 反向传播算法(代码笔记)
  12. IIS如何添加MIME类型.svg/.woff2/.woff
  13. php-opencv身份证识别,python opencv实现证件照换底功能
  14. 如何在五分钟让你的应用拥有高精度定位功能
  15. 一顿操作猛如虎,老罗也要啃老土
  16. 4.4 使用倾斜工具和整形工具制作图标 [Illustrator CC教程]
  17. python计算电费
  18. Html中的边框弧边,CSS边框属性一---border-radius
  19. Qt实现小型的超市收银系统
  20. C整数除法(不使用乘、除、取余)

热门文章

  1. vue 圆形 水波_vue 开发波纹点击特效组件
  2. sql能查到数据 dataset对象里面没有值_spark系列:RDD、DataSet、DataFrame的区别
  3. 第5堂:看到词句就会读-上
  4. Core Animation 文档翻译 (第二篇)—核心动画基础要素
  5. pta 习题集5-19 列车厢调度
  6. 第八章 了解tempdb数据库
  7. 20145101 《Java程序设计》第7周学习总结
  8. Ubuntu 14.10 下开机不进入图形化界面
  9. js代码格式化工具(格式化、压缩、加密压缩)
  10. 杭电OJ 敌兵布阵 树状数组