ServletContext.getRealPath("");获得的是 改项目下的绝对路径。 若把项目放在tomcat 下 则 位置就在 webapps/项目名
ServletContext.getRealPath("/"); 和 ServletContext.getRealPath("");返回的路径没有区别。
ServletContext.getRealPath("/image"); 这个会返回
这个相当于 webapps\recognition 拼接 getRealPath(“”)里面的内容。(recognition 是项目名)
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//response.getWriter().append("Served at: ").append(request.getContextPath());
ServletContext servletContext = this.getServletContext();
String savePath = servletContext.getRealPath("/image");
//判断文件夹是否存在
File file = new File(savePath);
if(!file.exists() && !file.isDirectory()) {
file.mkdir();
}
//上传步骤:
//即jar包为commons-fileupload.jar
//commons-io.jar
//1、创建一个DiskFileItemFactory工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
//2、创建一个文件上传解析器
ServletFileUpload upload = new ServletFileUpload(factory);
//解决上传文件名的中文乱码
upload.setHeaderEncoding("UTF-8");
//3、判断提交上来的数据是否是上传表单的数据
if(!ServletFileUpload.isMultipartContent(request)){
//按照传统方式获取数据
return;
}
//4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项
List<FileItem> list;
try {
list = upload.parseRequest(request);
for(FileItem item : list){
//如果fileitem中封装的是普通输入项的数据
if(item.isFormField()){
//
//
// if("name".equals(item.getFieldName())) {
// name =item.getString("UTF-8");
// }
// if("url".equals(item.getFieldName())) {
// url = item.getString("UTF-8");
// }
// if("saytext".equals(item.getFieldName())) {
// content = item.getString("UTF-8");
// }
// String name = item.getFieldName();
//解决普通输入项的数据的中文乱码问题
// String value = item.getString("UTF-8");
//value = new String(value.getBytes("iso8859-1"),"UTF-8");
}else{//如果fileitem中封装的是上传文件
//得到上传的文件名称,
String filename = item.getName();
System.out.println(filename);
if(filename==null || filename.trim().equals("")){
continue;
}
//注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如: c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt
//处理获取到的上传文件的文件名的路径部分,只保留文件名部分
filename = filename.substring(filename.lastIndexOf("\\")+1);
System.out.println(filename);
//获取item中的上传文件的输入流
InputStream in = item.getInputStream();
//创建一个文件输出流 //此处可以重命名文件
FileOutputStream out = new FileOutputStream(savePath + "\\" + filename);
System.out.print(savePath+"\\"+ filename);
//创建一个缓冲区
byte buffer[] = new byte[1024];
//判断输入流中的数据是否已经读完的标识
int len = 0;
//循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据
while((len=in.read(buffer))>0){
//使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\" + filename)当中
out.write(buffer, 0, len);
}
//关闭输入流
in.close();
//关闭输出流
out.close();
//删除处理文件上传时生成的临时文件
item.delete();
System.out.println("文件上传成功!");
}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
而框架中的上传文件及其简单
public @ResponseBody String upload(HttpServletRequest request,@RequestParam("file") MultipartFile file) {
if(!file.isEmpty()) {
//上传文件路径
String path = request.getServletContext().getRealPath("/upload");
System.out.println(path);
//上传文件名
String filename = UUID.randomUUID().toString().replaceAll("-", "");// 文件名称
String lastname = file.getOriginalFilename(); //获得文件的原来名字
lastname = lastname.substring(lastname.length()-4); //获得后缀名 列 .png
//组装
String name = filename+lastname;
File filepath = new File(path,name);
System.out.println(filepath);
//判断路径是否存在,如果不存在就创建一个
if (!filepath.getParentFile().exists()) {
filepath.getParentFile().mkdirs();
}
//将上传文件保存到一个目标文件当中
try {
file.transferTo(filepath);
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "success";
} else {
return "error";
}
}