文件上传与下载

学习文件上传与下载,首先要了解I/O流。
I/O流就是输入/输出流,包括字节流,字符流,缓冲流,随机流,数组流,数据流,对象流等。
我们只需要了解字节流(按字节读取),字符流(按字符读取)。

了解完I/O流就可以学习文件上传与下载了
文件上传:就是文件数据上传到java程序。

  • 文件上传需要使用form表单进行提交数据,并且form表单的enctype属性必须为multipart/form-data method的提交方法必须是post,因为get提交的大小有限制,很小。
  • 然后可以用request.getInputStream()方法获取一个数据流对象:ServletInputStream用于读取上传的对象;也有其他方法获取提交得对象,例如BufferedReader reader = req.getReader();
    上传文件的jsp界面代码
<form action="getFile" method="post" enctype="multipart/form-data"><input type="file" name="file"/><input type="submit" value="submit">
</form>

Servlet代码

package com.hjk.servlet;import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;public class getFile extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req,resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {ServletInputStream inputStream = req.getInputStream();byte[] buffer = new byte[1024];int len = -1;while((len = inputStream.readLine(buffer,0,1024))!=-1){String s = new String(buffer,0,len);System.out.println(s);}}
}

这样我们上传一个文件就可以在控制台输出文件里的内容了,应为是用二进制流读取的文件,所以输出的中文会乱码。

我们还要把这些数据写入文件用于保存,这里一般情况下是你根据上传的内容获取文件名字并在项目下创建文件并写入数据,这里我比较懒就随意创建一个写了。把数据写进去。

package com.hjk.servlet;import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;public class getFile extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req,resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {ServletInputStream inputStream = req.getInputStream();File file = new File("D://hello//hello1.txt");FileOutputStream fileOutputStream = new FileOutputStream(file);byte[] buffer = new byte[102400];int len = -1;while((len = inputStream.readLine(buffer,0,102400))!=-1){String s = new String(buffer,0,len);System.out.println(s);fileOutputStream.write(buffer,0,len);}}
}

但是写入的东西,和你原本的内容增加了一起其他的请求头什么的,并且可能还有乱码问题。
现在存在很多的解析器可以让我们处理文件,这里用apche提供的包commons-io-2.11.0.jarcommons-fileupload-1.4.jar
把这两个包导入后,简单写一个处理文件上传的servlet。

package com.hjk.servlet;import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.List;public class getFile extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req,resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {if(ServletFileUpload.isMultipartContent(req)){ //判断提交的表单是不是分段的,不是分段的不能处理DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();//创建ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);try {List<FileItem> fileItems = servletFileUpload.parseRequest(req);for (FileItem fileItem : fileItems) {if(fileItem.isFormField()){//如果是不普通文本不处理System.out.println("普通文本");}else{ //处理上传文件File file = new File("D://hello//hello1.txt");//保存文件路径,因为我知道我提交的是txt,这里我直接写死了//在真正开发中在根据实际情况处理fileItem.write(file);//写入文件}}} catch (Exception e) {e.printStackTrace();}}}
}

感谢小伙伴的关注与支持

文件上传--java相关推荐

  1. aliyun oss 文件上传 java.net.SocketTimeoutException Read timed out 问题分析及解决

    aliyun oss 文件上传 java.net.SocketTimeoutException Read timed out 问题分析及解决 参考文章: (1)aliyun oss 文件上传 java ...

  2. 文件上传 java web_JavaWeb 文件上传下载

    1. 文件上传下载概述 1.1. 什么是文件上传下载 所谓文件上传下载就是将本地文件上传到服务器端,从服务器端下载文件到本地的过程.例如目前网站需要上传头像.上传下载图片或网盘等功能都是利用文件上传下 ...

  3. java语言 文件上传,java中实现文件上传的方法

    java中实现文件上传的方法 发布时间:2020-06-19 10:29:11 来源:亿速云 阅读:86 作者:Leah 这篇文章给大家分享的是java中实现文件上传的方法,相信大部分人都还没学会这个 ...

  4. 文件上传 java 完美,vue+java实现文件上传(excel等),会出现跨域问题,直接用form表单提交就不会有问题了(new FormData())...

    vue+java实现文件上传(excel等),会出现跨域问题,直接用form表单提交就不会有问题了(new FormData()) 地址:https://www.cnblogs.com/muscles ...

  5. 阿里云 oss服务器文件上传 java

    前天做oss服务器文件上传,之前没了解过,做的过程中遇到许多问题,最终通过查阅相关资料解决了,特分享一下. 首先准备工作 必要的jar 这里注意版本一致,不然就会报很多坑爹的错误.. 如果你断点调试在 ...

  6. 文件上传java前端怎么写_Javaweb文件上传的前端和后端

    上传文件的分类: 无论什么方式上传文件,都要用post提交 方式一: 前端:表单方式上传文件 后端: 使用上传技术是apache中的Commons-fileupload.jar commons-io. ...

  7. 文件上传 java 进度条_Java如何实现动态显示文件上传进度条

    本文实例实现文件上传的进度显示,我们先看看都有哪些问题我们要解决. 1 上传数据的处理进度跟踪 2 进度数据在用户页面的显示 就这么2个问题, 第一个问题,主要是组件的选择 必须支持数据处理侦听或通知 ...

  8. 文件上传java逻辑_Java 文件上传 实例

    import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public cl ...

  9. 文件上传java前端怎么写_做一个文件上传,前端是ajax提交数据后台是java,这个错误怎么办...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 严重: Servlet.service() for servlet [dispatcherServlet] in context with path [/ ...

最新文章

  1. 为什么说 Python 内置函数并不是万能的?
  2. 美国科技三巨头的财报为何集体爆表?原因在这里
  3. windows 解决 Go下载包失败 设置代理
  4. AtCoder Beginner Contest 204 F Hanjo 2
  5. 10通信端口感叹号_S71200 技术篇——MODBUS TCP通信
  6. 一个比较笨的全文搜索的例子(分析结构用)-模糊查找
  7. 企业级Java开发树结构数据封装(开发必用)
  8. 【论文阅读】SIR模型下网络中多信息源检测 2014-IEEE
  9. blender 常用快捷键
  10. 信息系统项目管理师必背核心考点(十四)变更管理的工作程序
  11. 政策利好市场需求双加持,粉笔科技双轨并进强势突围
  12. 美光证实:DDR5 内存供应不足与 PMIC 和 VRM 短缺有关,2022 年改善的可能性很小
  13. linux怎么切换键盘布局,Ubuntu 切换键盘布局(colemak - workman - norman)
  14. 如何使用Everything搜索局域网共享文件夹?
  15. 【建议收藏】2021年中高级Android大厂面试秘籍,为你保驾护航金三银四,直通大厂
  16. C语言快速互转HEX(16进制)和原始字符串/数组
  17. app毕业设计作品安卓毕业设计成品基于Uniapp+SSM实现的智能课堂管理
  18. pos机骗局收取押金如何投诉-真实案列解答
  19. C语言 —— 一分钟让你理解自增和自减
  20. 推荐几个海外优秀的新闻网站[中文]

热门文章

  1. oracle北京考场,北京oracle数据库培训地址
  2. graphics.h 的下载及安装
  3. antd选择器下拉菜单样式修改
  4. 浙江理工大学电子计算机,2021浙江理工大学电子信息(计算机技术)085400考研调剂信息...
  5. HTML做成信纸格式,wps2010中怎样把页面设置成信纸格?
  6. 计算机网络课程设计网络嗅探器
  7. 稳定好看的Linux桌面,漂亮的桌面 哪一种Ubuntu官方版本最适合你?
  8. Java使用poi导入Excel
  9. 第一次Rosetta Stone总结
  10. STM32小系统板焊接 电烙铁的使用和烙铁头的选型及保养