为啥我上传文件后会报错
package com.mason.utils; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; 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; /** * 文件上传的工具类 * */ public class UploadUtils { /** * 生成唯一的文件名: */ public static String getUUIDFileName(String fileName){ // 将文件名的前面部分进行截取:xx.jpg ---> .jpg int idx = fileName.lastIndexOf("."); String extention = fileName.substring(idx); String uuidFileName = UUID.randomUUID().toString().replace("-", "")+extention; return uuidFileName; } public static Map uploadFile(HttpServletRequest request) throws IOException { Map<String,String> map = new HashMap<String,String>(); // 1.创建一个磁盘文件项工厂对象 DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory(); // 2.创建一个核心解析类 ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory); // 3.解析request请求,返回的是List集合,List集合中存放的是FileItem对象 String url = null; String uuidFileName= null; try { List<FileItem> list = servletFileUpload.parseRequest(request); for (FileItem fileItem : list) { if(fileItem.isFormField()){ // 不是文件上传 // 接收表单项参数的值: //如:<input name="name" value="aaa"> String name = fileItem.getFieldName(); // 获得表单项的name属性的值 name String value = fileItem.getString("UTF-8");// 获得表单项的值 aaa // 存入集合 map.put(name, value); }else{ // 文件上传 // 文件上传项: // 文件上传功能: // 获得文件上传的名称: String fileName = fileItem.getName(); System.out.println("filename="+fileName); if(fileName !=null && !"".equals(fileName)){ // 通过工具类获得唯一文件名: uuidFileName = UploadUtils.getUUIDFileName(fileName); // 获得文件上传的数据: InputStream is = fileItem.getInputStream(); // 获得文件上传的路径: String path = request.getServletContext().getRealPath("/upload"); // 将输入流对接到输出流就可以了: url = path+"\\"+uuidFileName; OutputStream os = new FileOutputStream(url); int len = 0; byte[] b = new byte[1024]; while((len = is.read(b))!=-1){ os.write(b, 0, len); } is.close(); os.close(); map.put("path", request.getContextPath()+"/upload/"+uuidFileName); map.put("filename", fileName); } System.out.println(map); } } } catch (FileUploadException e) { e.printStackTrace(); } return map; } public static void main(String[] args) { System.out.println(getUUIDFileName("1.jpg")); } }
8
收起
正在回答
2回答
同学你好,建议同学刷新一下项目或者重启idea试试哦~
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
3. Java 数据库开发与实战应用
- 参与学习 人
- 提交作业 357 份
- 解答问题 8016 个
本阶段将带你学习MySQL数据库,JDBC接口,MyBatis框架等,带你掌握的数据的存放和管理。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星