老师看这里!我的URL错在哪里了?为什么会报错?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | package com.imooc.utils; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; 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; /** * 文件上传工具类 * @author idea * */ public class UploadUtils { //生成随机并唯一的文件名 public static String getUUIDFileName(String fileName) { //将文件名的前面部分进行截取,例:XX.jpg-->.jpg //获得"."的index值 int index=fileName.lastIndexOf( "." ); String extension=fileName.substring(index); //得到拓展名,例.jpg //生成一串随机的字符串并将“-”去掉,然后加上拓展名就形成了随机并唯一的文件名 String uuidFileName=UUID.randomUUID().toString().replace( "-" , "" )+extension; return uuidFileName; } public static Map<String,String> uploadFile(HttpServletRequest request,String uploadDirection) throws IOException{ //接收数据 //文件上传基本操作 //定义一个Map集合,用于保存接收到的数据 Map<String,String> map= new HashMap<String,String>(); try { //1、创建一个磁盘文件项目工厂对象 DiskFileItemFactory factory= new DiskFileItemFactory(); //2、创建一个核心解析类 ServletFileUpload upload= new ServletFileUpload(factory); //3、解析request请求,返回的是List集合,List集合中存放的是FileItem对象 List<FileItem> list=upload.parseRequest(request); //文件上传的路径 String url= null ; //4、遍历集合,取得每个FileItem对象,并判断是表单项还是文件上传项 for (FileItem fileItem:list) { //判断是表单项还是文件上传项 if (fileItem.isFormField()) { //判断是表单项 //获得表单项的值 String name=fileItem.getFieldName(); //获得name属性值,例获得name="account"的account String value=fileItem.getString( "utf-8" ); //获得用户填入该表单项的值 map.put(name, value); } else { //判断是文件上传项 //完成文件上传 //获得要上传的文件的名称 String fileName=fileItem.getString(); //通过工具类来获得唯一文件名 String uuidFileName=UploadUtils.getUUIDFileName(fileName); //获得文件上传的数据 InputStream is=fileItem.getInputStream(); //获得文件上传的路径,我选择将用户上传的文件存在META-INF的upload下 String path=request.getServletContext().getRealPath(uploadDirection); //将输入流对接到输出流 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(); } } } catch (FileUploadException e) { e.printStackTrace(); } return map; } } |
32
收起
正在回答 回答被采纳积分+1
3回答
好帮手慕珊
2018-01-15 16:48:38
我试了也没什么问题呢,你新建个工程,然后新建一个Servlet,把下面的代码运行一下,这时候会在控制台输出文件所在的路径,看看能否运行成功。如果还是报错,看看打印输出的那个路径是否存在upload文件夹。我这里的upload文件夹就是建在WebContent目录下。
1 2 3 4 5 6 7 8 9 | protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub String path=request.getServletContext().getRealPath( "/upload" ); System.out.println( "path=" +path); String url=path+ "\\" + "uuidFileName.txt" ; OutputStream os= new FileOutputStream(url); os.write( 12 ); os.close(); } |
祝学习愉快!
高为砚
2018-01-15 16:19:09
1 2 3 4 5 6 7 8 9 10 11 12 13 | //判断是文件上传项 //完成文件上传 //获得要上传的文件的名称 String fileName=fileItem.getString(); //通过工具类来获得唯一文件名 String uuidFileName=UploadUtils.getUUIDFileName(fileName); //获得文件上传的数据 InputStream is=fileItem.getInputStream(); //获得文件上传的路径,我选择将用户上传的文件存在META-INF的upload下 String path=request.getServletContext().getRealPath( "/upload" ); //将输入流对接到输出流 url=path+ "\\" +uuidFileName; OutputStream os= new FileOutputStream(url); //控制提示这里错误,不知道怎么错了。。 |
相似问题
登录后可查看更多问答,登录/注册
从网页搭建入门Java Web2018版
- 参与学习 人
- 提交作业 1088 份
- 解答问题 10204 个
如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧