文件的上传功能
最近在学习javaweb,突然文件上传功能是如何实现的
下面就来看看把。
首先在一个jsp页面的body标签内添加代码
<form action="/anno/fileUpload" method="post" enctype="multipart/form-data">
选择文件 <input type="file" name="upload" /><br/>
<input type="submit" name="上传" /><br/>
</form>
我们知道表单提交默认的类型是application/x-www-form-urlencoded,它会将表单中的数据变为键值对
就是类似在username=123&password=456这种格式提交,当我们上传的含有非文本内容,即含有文件(txt、MP3等)的时候,需要将form的enctype设置为multipart/form-data
接下来就要在一个控制器里写函数
/**
* 传统的文件上传的方法
* @param request
* @return
* @throws Exception
*/
@RequestMapping("/fileUpload")
public String fileUnload( HttpServletRequest request) throws Exception {
System.out.println("fileUpload执行了。。。。。。。");
// 找到文件要上传的路径
String path = request.getSession().getServletContext().getRealPath("/uploads/");
File file = new File(path);
// 查看文件upload是否存在
if(!file.exists())
{ file.mkdir();}
//解析request对象,获取上传文件项,DiskFileItemFactory磁盘文件项工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
//遍历
List<FileItem> items = upload.parseRequest(request);
for(FileItem item:items)
{
// 进行判断是否是上传的文件项目
if(item.isFormField())
{
//说明是普通表单
}
else{
//说明是文件项目
//先得到文件项目的名字
String filename= item.getName();
//把文件名设置成唯一的,uuid通用唯一标识码
String uuid= UUID.randomUUID().toString().replace("-","");
filename=uuid+"_"+filename;
//完成上传文件 ,path是上传到文件路径,filename是上传的文件的名字,用write写入
item.write(new File(path,filename));
//删除生成的临时的文件
item.delete();
System.out.println("写入成功!");
}
}
return "successful";
}
最后上传的文件可以在targe文件夹下找到。