您的位置:首页 > 其它

文件上传简易版

2016-07-22 17:21 260 查看
以下是index.jsp的核心代码:

<form action="<%= request.getContextPath()%>/upload" method="post" enctype="multipart/form-data">
文件1:<input type="file" name="file"/><br/>
文件1的说明:<input type="text" name="desc1"/><br/>
文件2:<input type="file" name="file2"/><br/>
文件2的说明:<input type="text" name="desc2"/><br/>
<input type="submit" value="提交"/>
</form>


以上值得注意的一点是:enctype=“multipart/form-data”这一句是必须的,不填默认为enctype=”application/x-www-form-urlencode”。

后台servlet核心代码:

“`

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//※下面这句解决上传文件名的中文乱码

//注意,下面这句设置中文,如果是“multipart/form-data”表单,可以设置其中file组件的文件名,但对其中的普通表单组件无效。

//注意,下面这句设置中文,如果是我们以前用的“application/x-www-form-urlencoded”表单,可以设置其中的普通表单组件。

request.setCharacterEncoding(“utf-8”);

//先获取所接收文件要保存的路径
String path = getServletContext().getRealPath("/imgs");

//文件上传需要临时目录(如果不指定,那么该目录就是tomcat/temp )
File tempDir = new File("d:/a");
DiskFileItemFactory fileFactory = new DiskFileItemFactory(1024*8, tempDir);//创建用于解析文件的工厂类,同时设置缓冲区的位置和大小
//※※※※思路的入口
ServletFileUpload upload = new ServletFileUpload(fileFactory);
upload.setFileSizeMax(1024*1024*5);//设置每个文件最大为5M
upload.setSizeMax(1024*1024*8);//所有上传文件大小之和的最大值,此处设最多能上传8M

//以下开始解析
try {
List<FileItem> list= upload.parseRequest(request);
for(FileItem fi:list){
if(fi.isFormField()){//普通表单组件,如:<input type="text" name="desc1"/>
String str = fi.getString("utf-8");//※以指定编码的方式获取,来解决普通表单组件的中文乱码问题
System.out.println("普通表单组件..."+str);
}else{//文件组件
String fileName = fi.getName();//文件名
System.out.println("fileName:"+fileName);
//由于上传的文件“名字”可能会有中文,而服务器目录当中的资源名称不能够用中文,因此要把它转换成非中文的文件名(要考虑文件名不能重复)
String uuid = UUID.randomUUID().toString().replace("-", "");
String ext = fileName.substring( fileName.lastIndexOf("."));//截取文件的扩展名: .jpg
String newFileName = uuid+ext;
//真正的文件内容在 fi.getInputStream() 当中
FileUtils.copyInputStreamToFile(fi.getInputStream(), new File(path+"/"+newFileName));
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}
}


}

还有个细节,这里后台引用了Apache的两个组件来实现文件上传那功能,commons-io.jar和conmons-fileupload.jar
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  文件上传