sevlet3.0上传文件功能

简介: 在sevlet3.0以前,java上传文件很麻烦,要么用底层的request.getinputstream。获取流,但是这个流不是干净的流,报过上传的文件名都在文件的前部分,包括文件的结尾也有特殊的字符。需要使用io层层过滤。提取你所需要的文件,鉴于水平有限,我只能提txt文本文件的内容,然而一道图片处理总是丢失或者多出一些东西来。知道原理后也不打算深入研究。

在sevlet3.0以前,java上传文件很麻烦,要么用底层的request.getinputstream。获取流,但是这个流不是干净的流,报过上传的文件名都在文件的前部分,包括文件的结尾也有特殊的字符。需要使用io层层过滤。提取你所需要的文件,鉴于水平有限,我只能提txt文本文件的内容,然而一道图片处理总是丢失或者多出一些东西来。知道原理后也不打算深入研究。


另外就是使用外部jar包上传文件,这种也是基于request.getinputstream。获取文件,只不过人家帮你把方法封装好,你只需使用即可。


但是自从sevlet3.0出来之后这一切就改变了。出现一个part类,这个类把各个部分相对较干净的分离,尤其是文件输入流。你得到的流就是干净的流,直接正常的io读取就可以。在学习part的过程中,你可以一步步试探的学习,打印看看出来的是什么。然后截取有用的,最后上传为文件就好了。


附上代码:


首先:jsp部分upload.jsp


<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="utf-8"%>
 文件上传实例</title>
</head>
 文件上传实例 </h1>
 选择一个文件:
</form>
</body>
</html>


sevlet部分


import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Collection;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
@MultipartConfig
public class doupload extends HttpServlet {
  public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.setCharacterEncoding("UTF-8");//防止乱码,一定要有
  Part part=request.getPart("file");//名称
  upload(part);//下载文件
  }
 public String getname(Part part)//获取名称
 {
  String contentdisposition=part.getHeader("content-disposition");//form-data; name="file"; filename="jsp学习.txt"
  String[]filename=contentdisposition.split("=");//分隔
  String filename1=filename[filename.length-1];//"jsp学习.txt"
  String filename2=filename1.replace("\"", "");
  return filename2;
 }
 public void upload(Part part) throws IOException
 {
  String path=this.getServletContext().getRealPath("fileget/");//专门创建一个fileget文件夹存取内容
  File file=new File(path);
  if(!file.exists())//不存在就新建文件夹
  {
    file.mkdir();
  }
  File file2=new File(file,getname(part));//创建文件
  if(!file2.exists()){file2.createNewFile();}
  InputStream in=part.getInputStream();
  OutputStream out=new FileOutputStream(file2);
  byte by[]=new byte[1024];   
  while(in.read(by, 0, 1024)!=-1)
  {
    out.write(by);
    by=new byte[1024];
  }
  in.close();
  out.close();
 }
}


xml配置:


 <web-app>
   <servlet>
<servlet-name> doupload2</servlet-name>
<servlet-class>  com.runoob.test.doupload</servlet-class>
 </servlet>
 <servlet-mapping>
<servlet-name> doupload2</servlet-name>
 <url-pattern>/doupload2</url-pattern>
 </servlet-mapping>
</web-app>


经测试可以上传大部分文件,但是文件上传没有优化,如果你想优化,可以使用buffered缓存优化,至于其他优化就不太知道了,本人小白。如果有的可以交流!

目录
相关文章
|
8月前
|
开发框架 移动开发 小程序
uniapp实现上传文件功能
uniapp实现上传文件功能
613 0
|
API 对象存储 Java
实现从oss(阿里云)服务器以附件形式下载文件(含批量下载)
实现从oss(阿里云)服务器以附件形式下载文件(含批量下载) 笔者在项目中写一个从阿里云服务器上面以附件形式下载文件的接口时,遇到了问题,网上搜索无任何相关的解决方案,最后通过通过自己查阅API文档,再结合自己的经验,实现了下载功能。
6800 0
|
7月前
|
JSON 前端开发 JavaScript
前端上传文件前校验文件数据
该文介绍了如何在Vue项目中实现批量导入Excel数据的校验。使用Element UI的`el-upload`组件上传文件,通过FileReader读取内容,结合XLSX库解析Excel为JSON。解析过程包括将二进制数据转换为workbook对象,提取worksheet并转化为JSON。之后,遍历JSON数据进行字段校验,若发现空值则记录错误。提供的Demo展示了选择Excel文件后控制台显示校验结果。技术栈包括vue 2.6.14、element ui 2.15.14和xlsx 0.17.0。建议将此类功能封装为通用组件以复用。
131 2
前端上传文件前校验文件数据
|
8月前
|
移动开发 前端开发
VForm3的文件上传方式
VForm3的文件上传方式
224 0
|
8月前
|
对象存储
阿里云上传文件
阿里云上传文件
175 0
|
前端开发
前端下载文件的几种方式
前端下载文件的几种方式
1196 0
|
前端开发
前端上传文件或者上传文件夹
前端上传文件或者上传文件夹
265 0
前端上传文件或者上传文件夹
|
开发者
上传文件到服务器 | 学习笔记
快速学习上传文件到服务器。
139 0
上传文件到服务器 | 学习笔记
|
缓存 Java
sevlet实现下载文件功能
希望做一个小板块,实现文件的上传和下载,那么上传实现了,就需要实现下载,阅读了各位的博客总结了一下。在网页中通过超链接是可以访问我的资源的,浏览器不可访问的资源他就会下载到本地,像一些浏览器可以直接访问的如图片,txt文件浏览器会直接打开。这就需要我们在sevlet中统一处理文件下载。
151 0
sevlet实现下载文件功能
|
前端开发 JavaScript API
我学会了,写一个前端下载文件功能
过去有很多次文件下载的功能,但是都没有记录下来,这次有空就把文件下载的功能从0写一遍,于是就有了这篇文章。 我会从简到难的方式去实现下载功能。从直接下载字符串到简单请求下载文件,最终通过后端返回的文件名来实现动态下载文件。
725 0
我学会了,写一个前端下载文件功能