java实现文件的上传功能
程序员文章站
2022-06-18 11:02:50
本文实例为大家分享了java实现文件的上传功能的具体代码,供大家参考,具体内容如下直接上代码了一、上传界面<%@ page language="java" contenttype="text/h...
本文实例为大家分享了java实现文件的上传功能的具体代码,供大家参考,具体内容如下
直接上代码了
一、上传界面
<%@ page language="java" contenttype="text/html; charset=utf-8" pageencoding="utf-8"%> <!doctype html public "-//w3c//dtd html 4.01 transitional//en" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>insert title here</title> </head> <body> <!-- 文件上传对表单的要求 1、表单中的请求和提交的方式必须是post 2、 表单中应该指定提交的请求为multipart 请求 ,通过在form表单中添加enctype属性 为multipart/form-data 3、表单中要有file元素 --> <!-- ${pagecontext.request.contextpath}/registerservlet --> <form action="${pagecontext.request.contextpath }/registerservlet" method="post" enctype="multipart/form-data"> 姓名:<input type="text" name="name" /><br> <hr> 年龄:<input type="text" name="age" /><br> <hr> 照片 :<input type="file" name="photo"/> <br> <hr> <input type="submit" value="注册"> <hr> </form> </body> </html>
二、servlet处理
package com.ui.servlet; import java.io.file; import java.io.fileoutputstream; import java.io.ioexception; import java.io.inputstream; import java.io.outputstream; import java.util.list; 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 org.apache.commons.fileupload.fileitem; import org.apache.commons.fileupload.disk.diskfileitemfactory; import org.apache.commons.fileupload.servlet.servletfileupload; import org.apache.tomcat.jni.os; import com.mysql.jdbc.field; /** * servlet implementation class registerservlet */ @webservlet("/registerservlet") public class registerservlet extends httpservlet { private static final long serialversionuid = 1l; /** * @see httpservlet#dopost(httpservletrequest request, httpservletresponse response) */ protected void dopost(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { // todo auto-generated method stub if(!servletfileupload.ismultipartcontent(request)) { throw new runtimeexception("当前不支持文件上传"); } try { diskfileitemfactory factory=new diskfileitemfactory(); //设置使用临时文件的边界值,大鱼该值得文件上传会先保存在临时文件中,否则上传文件会直接写入到内存当中去 //单位 字节 在这里设置的为1m factory.setsizethreshold(1024*1024*1); //设置临时文件 string temppath=this.getservletcontext().getrealpath("/temp"); file file2=new file(temppath); factory.setrepository(file2); //创建文件上传核心组件 servletfileupload fileupload=new servletfileupload(factory); //设置单个文件的大小不超过多少 fileupload.setfilesizemax(1024*1024*2); //上传多个文件的要求总的大小不超过多少 fileupload.setsizemax(1024*1024*5); fileupload.setheaderencoding("utf-8"); //设置每一个item的字符编码为utf-8 list<fileitem> items=fileupload.parserequest(request); for (fileitem fileitem : items) { if(fileitem.isformfield()) { string filename=fileitem.getfieldname(); string filevalue=fileitem.getstring("utf-8"); system.out.println(filename+"----"+filevalue); } else //如果是文件上传表单项 { string filename=fileitem.getname(); inputstream inputstream=fileitem.getinputstream(); //获取表单项的输入流 string path=this.getservletcontext().getrealpath("/filecontents"); file file=new file(path,filename); outputstream outputstream=new fileoutputstream(file); int len=-1; byte[] bs=new byte[1024]; while((len=inputstream.read(bs))!=-1) { outputstream.write(bs,0,len); } outputstream.close(); inputstream.close(); //删除临时文件 fileitem.delete(); } } } catch (exception e) { // todo: handle exception system.out.println(e); } } }
三、实现结果
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。