控制台没有输出,上传的文件也不在路径中

控制台没有输出,上传的文件也不在路径中

package com.imooc.servlet;


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.FileUploadException;

import org.apache.commons.fileupload.disk.DiskFileItemFactory;

import org.apache.commons.fileupload.servlet.ServletFileUpload;


@WebServlet("/UploadServlet")

public class UploadServlet extends HttpServlet {

private static final long serialVersionUID = 1L;


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

// 1. 创建磁盘文件项工厂

DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();

// 2. 创建核心解析类

ServletFileUpload fileUpload = new ServletFileUpload(diskFileItemFactory);

// 3. 解析请求对象,将请求分成几个部分(FileItem)

try {

List<FileItem> list = fileUpload.parseRequest(request);

// 4. 遍历集合,获取每个部分的对象

for(FileItem fileItem : list) {

// 5. 判断是普通项还是文件上传项

if(fileItem.isFormField()) {

// 普通项

// 获取普通项的名称:

String name = fileItem.getFieldName();

// 获取普通项的值:

String value = fileItem.getString("UTF-8");

System.out.println(name + ":" + value);

}else {

// 文件上传项

// 获取文件名称:

String fileName = fileItem.getName();

// 获取文件的输入流:

InputStream is = fileItem.getInputStream();

// 需要将文件写入到服务器的某个路径:

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

System.out.println(path);

// 创建输出流与输入流进行对接:

OutputStream os = new FileOutputStream(path + "\\" + fileName);

int len = 0;

byte[] b = new byte[1024];

while((len = is.read(b)) != -1) {

os.write(b, 0, len);

}

is.close();

os.close();

  }

}

} catch (FileUploadException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}


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

doGet(request, response);

}


}


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小脸 2021-07-03 18:04:01

同学你好,经测试运行上述贴出代码是可以在控制台正确输出的,如下:

http://img1.sycdn.imooc.com//climg/60e035680929bbc605950090.jpg

上传的文件也会在Tomcat下的web项目的upload文件夹中。如下:

http://img1.sycdn.imooc.com//climg/60e035cc09b19bf907220219.jpg

这里建议同学在eclipse中对项目进行clean处理,然后重新访问再试试

祝学习愉快~

  • 提问者 FengMeii #1

    把上传文件的代码复制到regist_login项目中可以正常使用,在upload项目中就是不行

    2021-07-03 18:06:29
  • 提问者 FengMeii #2

    到for循环那里就不执行了,for循环里面的打印语句无法输出

    2021-07-03 18:07:32
  • 好帮手慕小脸 回复 提问者 FengMeii #3

    同学你好,建议下载课程源码对比一下目录结构,老师这边复制同学的代码测试是没有问题的。其次建议清除缓存试一下

    祝学习愉快~

    2021-07-03 19:00:05
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师