首页 > 编程语言 >如何用java代码实现上传文件和下载文件

如何用java代码实现上传文件和下载文件

时间:2023-09-27 09:44:46浏览次数:43  
标签:文件 java File request file new 上传

如何用java代码实现上传文件:
首先创建一个项目创建index.jsp页面如下

只要是上传文件就要使用form标签的enctype属性:

<!--只要是涉及到上传文件 enctype="multipart/form-data" -->
<form action="UploadServlet" method="post" enctype="multipart/form-data">
<input type="text" name="user">
<input type="file" name="fName">
<input type="submit" value="上传">
</form>

之后创建UploadServlet,servlet当提交上传的文件之后进行处理:

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

//上传文件
//一般都会保存到项目里面去
String pathString=this.getServletContext().getRealPath("/WEB-INF/Upload");
//判断路径是否存在
File file=new File(pathString);
if (!file.exists()&& !file.isDirectory()) {
//如果目录不存则创建
System.out.println("创建路径");
file.mkdir();
}
//接下来就是servlet控制台的区别
//1、创建文件上传的工厂
DiskFileItemFactory factory=new DiskFileItemFactory();
//2、创建文件解析的工具
ServletFileUpload upload=new ServletFileUpload(factory);
//解决中文乱码的问题
upload.setHeaderEncoding("UTF-8");//设置好请求头部的字符编码
//3、判断提交上传的数据是否是上传表单的数据
//通过jar判断请求的request对象是否为上传表单
if (!ServletFileUpload.isMultipartContent(request)) {
return;//如果不是则直接return 不往下面走
}
//4、使用文件工具对象, 去解析表单 使用工具解析我们上传的所有数据
try {

List<FileItem> list= upload.parseRequest(request);
//把整个表单的数据解析, 然后封装成list的集合

for (FileItem fileItem : list) {
//要区分是普通的文本框还是文件筐
if (fileItem.isFormField()) {//普通的
String nameString=fileItem.getFieldName();//拿到属性名
String valueString=fileItem.getString("UTF-8");
System.out.println(nameString+valueString);

}else{//文件的
String fileNameString=fileItem.getName();
System.out.println(fileNameString);

//5、创建输入流和输出流
InputStream inputStream=fileItem.getInputStream();
FileOutputStream outputStream=new FileOutputStream(pathString+"\\"+fileNameString);

byte[] bytes=new byte[1024];
int i=0;
//循环将输入到数组里面如果大于0说明还有数据
while ((i=inputStream.read(bytes))>0) {

outputStream.write(bytes,0,i);
}
//关闭资源
inputStream.close();
outputStream.close();
}
}
} catch (FileUploadException e) {

e.printStackTrace();
}
}

 这样就完成了文件的上传,接着直接到你的Tomcat项目找到你的webapps—>你的项目名字…

 就可以看到你上传的文件了。
接下来是下载:
首先我们需要把指定的文件读取出来在页面中显示:创建一个servlet,DownLoadListServlet:

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//我们要把所有下载的文件加载到页面里面
String downPath=this.getServletContext().getRealPath("/WEB-INF/upload");

//System.out.println("完整路径是:"+downPath);
//获取当前下载列表的路径
//创建一个存储文件名的集合
Map<String, String> fileList=new HashMap<String, String>();
File file=new File(downPath);//该目录可以是文件也可以是目录
list(file, fileList);
request.getSession().setAttribute("fileList",fileList);
response.sendRedirect("download.jsp");
}
/**
* 通过该方法吧所有的文件插入到集合里面
* @param file
* @param map
*/
public void list(File file,Map<String, String> map){
//判断我们传入进来的file是一个文件还是一个目录
if (file.isFile()) {//这里是一个文件是true
map.put(file.getName(), file.getName());
}else {//不是文件而是一个目录
File[] files=file.listFiles();//把所有的文件拿到手
for (File f : files) {
list(f,map);//使用递归除非是文件才插入
}
}
}

当我们获取到文件之后跳转到download.jsp显示:使用的是EL和标签库输出数据

<!-- 遍历一下map集合 -->
<c:forEach var="me" items="${fileList}">
<c:url value="DownloadFileServlet" var="downurl">
<c:param name="fileName" value="${me.key}"></c:param>
</c:url>
${me.value}<a href="${downurl}">下载</a>
</c:forEach>

点击下载的时候跳转到DownloadFileServlet,servlet进行处理:

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

request.setCharacterEncoding("utf-8");
String fileNameString=request.getParameter("fileName");
//用户选择下载的文件名拿到手

//因为我们的路径保存在upload
String path=this.getServletContext().getRealPath("/WEB-INF/upload");
//要在当前的路径里面找到文件夹的路径
File file=new File(path+"\\"+fileNameString);

//确保我们下载的文件真实存在的
if (!file.exists()) {
//如果不存在这不用下载
return;
}
response.setHeader("content-disposition", "attachment;filename="
+URLEncoder.encode(fileNameString,"UTF-8"));
//设置响应头控制浏览器下载该文件
InputStream inputStream=new FileInputStream(file);
//输入流
OutputStream out=response.getOutputStream();

//创建缓冲区
byte [] bytes=new byte[1024];
int i=0;
while ((i=inputStream.read(bytes))>0) {
out.write(bytes,0,i);
}
inputStream.close();
out.close();
}

 当我们点击下载的时候就成功了!

 

参考文章:http://blog.ncmem.com/wordpress/2023/09/27/%e5%a6%82%e4%bd%95%e7%94%a8java%e4%bb%a3%e7%a0%81%e5%ae%9e%e7%8e%b0%e4%b8%8a%e4%bc%a0%e6%96%87%e4%bb%b6%e5%92%8c%e4%b8%8b%e8%bd%bd%e6%96%87%e4%bb%b6/

欢迎入群一起讨论

 

 

标签:文件,java,File,request,file,new,上传
From: https://www.cnblogs.com/songsu/p/17731945.html

相关文章

  • JavaScript-Object 对象的相关方法
    Object.getPrototypeOf() Object.getPrototypeOf方法返回参数对象的原型。这是获取原型对象的标准方法。varF=function(){};varf=newF();Object.getPrototypeOf(f)===F.prototype//true上面代码中,实例对象f的原型是F.prototype。下面是几种特殊对象的原型。//空对......
  • Java内部类
    1.为什么使用内部类?使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响1.1.使用内部类最大的优点就在于它能够非常好的解决多重继承的问题,使用内部类还能够为我们带来如下特性:(1)、内部类可......
  • JavaSE day01【复习回顾面向对象基础、继承、抽象类】测评
    选择题题目1(单选):下列关于Java中类与类之间的关系描述正确的是()选项:​ A.Java中类与类属于多继承,还可以多层继承​ B.Java中类与类属于实现关系,可以单实现也可以多实现​ C.Java中类与类属于实现关系,可以只能单实现​ D.Java中类与类属于单继承,......
  • 第01章:随堂复习与企业真题(Java语言概述)
    第01章:随堂复习与企业真题(Java语言概述)一、随堂复习1.Java基础全程的学习内容第1阶段:Java基本语法>Java概述、关键字、标识符、变量、运算符、流程控制(条件判断、选择结构、循环结构)、IDEA、数组第2阶段:Java面向对象编程>类及类的内部成员>面向对象的三大特征>其它......
  • 尚硅谷_第01章_Java语言概述
    第01章_Java语言概述拓展练习讲师:尚硅谷-宋红康网址:www.atguigu.com1、System.out.println()和System.out.print()有什么区别?System.out.println();//打印完后,会换行。System.out.print();//打印完后,不会换行。2、一个".java"源文件中是否可以包括多个类?有什么限制?......
  • 无涯教程-JavaScript - T.TEST函数
    描述T.TEST函数返回与学生t检验相关的概率。使用T.TEST来确定两个样本是否可能来自均值相同的两个相同基础人口。语法T.TEST(array1,array2,tails,type)争论Argument描述Required/OptionalArray1Thefirstdataset.RequiredArray2Theseconddataset.Required......
  • 《Java编程思想第四版》学习笔记31--关于Externalizable
    //:Blip3.java//Reconstructinganexternalizableobjectimportjava.io.*;importjava.util.*;classBlip3implementsExternalizable{inti;Strings;//NoinitializationpublicBlip3(){System.out.println("Blip3Constructor");//s,inoti......
  • 单点登录与host文件
    背景今天有遇到一个场景,需要在局域网中访问vue3+vite项目,一般情况下,只需要在vite配置文件中配置host为"0.0.0.0",然后让别人访问你本地ip地址就可以了(注意,是电脑的本地ip)。但是遇到了别的问题。原因当我们使用ip+端口访问到别人的项目,会被重定向到登录页,输入账号密码,登录成功后......
  • Hadoop是什么? Hadoop是一个由Apache开发的开源分布式计算框架,它能够处理大规模数据并
    Hadoop是什么?Hadoop是一个由Apache开发的开源分布式计算框架,它能够处理大规模数据并行处理任务,支持大规模数据存储和处理。Hadoop的核心组件包括分布式文件系统HDFS和分布式计算框架MapReduce,它们使得Hadoop可以在廉价的硬件上并行地处理大量数据。Hadoop还包括很多相关的项目和子......
  • Java 实现邮件发送
    importorg.apache.http.HttpEntity;importorg.apache.http.client.methods.CloseableHttpResponse;importorg.apache.http.client.methods.HttpPost;importorg.apache.http.entity.ContentType;importorg.apache.http.entity.StringEntity;importorg.apache.http.i......