jsp中上传文件

1.创建JSP页面

<foraction="UploadServlet" method="post" enctype="multipart/form-data">

  用 户 名:   <input type="text" name="username"/>

 上传文件: <input type="file" name="file"/><br/>

 <input type="submit" value="提交"/>

2.创建servlet

package com.shxt.servlet;

public class UploadServlet extends HttpServlet {

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//解决文件乱码

request.setCharacterEncoding("utf-8");

//1.创建DiskFileItemFactory 对象

DiskFileItemFactory dfif = new DiskFileItemFactory();

//2.创建ServletFileUpload类的实例。使用DiskFileItemFactory 对象作为参数

ServletFileUpload upload = new ServletFileUpload(dfif);

//3.解析请求对象中所有的表单项,返回一个list列表 每一个表单项或叫表单控件都对应一个FileItem

try {

List<FileItem> items = upload.parseRequest(request);

for(FileItem item : items){

//判断表单项是file类型还是一般类型

if(item.isFormField()){

//一般表单类型

//String getFieldName():获取到表单域的name属性。

String filedName = item.getFieldName();

//String getString([encoding]):以默认或指定的编码方式获取到当前fileitem的内容

String value = item.getString("utf-8");

request.setAttribute(filedName, value);

}else{

//file表单类型

String filedName = item.getFieldName();

//获取所上传的文件名

String value = item.getName();

//由于有多个浏览器版本,所以要做字符串截取处理

String resultFileName=value.substring(value.lastIndexOf("\\")+1);

request.setAttribute(filedName, resultFileName);

//获取应用程序上下文WebRoot

String path=request.getRealPath("/upload");

//将文件格式上传到浏览器

//构建一个输出流,目的是将用户上传的文件以输出流的方式写入到应程序上下文的upload文件夹中

OutputStream os=new FileOutputStream(new File(path,resultFileName));

//构建一个输入流,目的是以流的方式接收用户上传的文件 

InputStream is=item.getInputStream();

//将输入流里的内容写入到输出流中,目的是在程序上下文的upload文件夹中创建用户上传的文件

//流的输入输出 要借助于缓冲区,即使用字节数组,400为缓冲区大小-->400byte

byte[] buffer = new byte[400];

//length代表读取的字节数量

int length = 0;

//输入流是使用read()方法按字节读取文件,并读到上面创建的缓冲区中,大于0表示还有内容要读取

while((length = is.read(buffer))>0){

//有内容就要不断的将文件内容使用输出流写到程序上下文的upload文件夹中

os.write(buffer,0,length);

}

}

} }catch (Exception e) {

e.printStackTrace();

}

}

}

3,在webinfo  创建upload 文件夹

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值