老师看这里!我的URL错在哪里了?为什么会报错?

老师看这里!我的URL错在哪里了?为什么会报错?

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;
	}
}

http://img1.sycdn.imooc.com//climg/5a5ae294000150b106710343.jpg

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

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

3回答
好帮手慕珊 2018-01-15 16:48:38

我试了也没什么问题呢,你新建个工程,然后新建一个Servlet,把下面的代码运行一下,这时候会在控制台输出文件所在的路径,看看能否运行成功。如果还是报错,看看打印输出的那个路径是否存在upload文件夹。我这里的upload文件夹就是建在WebContent目录下。

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();
}

祝学习愉快!

  • 提问者 高为砚 #1
    您给我的代码可以运行成功,但是回到自己写的工程中,还是老样子。就这样吧,我已经绝望了。谢谢老师的回答!!!
    2018-01-15 17:15:06
  • 不要着急,慢慢来,学会怎么调试,你把你的代码中的url打印输出,看看是什么内容。打印输出这种调试方式很有用的,如果debug用不好,可以用这个
    2018-01-15 17:28:04
提问者 高为砚 2018-01-15 16:19:09
//判断是文件上传项
//完成文件上传
//获得要上传的文件的名称
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);//控制提示这里错误,不知道怎么错了。。

http://img1.sycdn.imooc.com//climg/5a5c63250001801502890333.jpg

好帮手慕珊 2018-01-15 10:16:07

是否在你提到的这个META-INF文件夹下创建了upload文件夹,这个文件夹需要手动创建。不过不建议你把upload建在META-INF下,可以像老师视频中一下,在WebContent下创建。

如果还有问题再继续提问。祝学习愉快!

  • 提问者 高为砚 #1
    还是不行,报同样的错误。uoload会自动创建在META-INF下,老师您看看我上面新贴的代码,看看URL哪写错了。
    2018-01-15 16:20:46
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
从网页搭建入门Java Web2018版
  • 参与学习           人
  • 提交作业       1088    份
  • 解答问题       10205    个

如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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