文件上传功能的实现
在大多数网站中,我们都可以看见文件上传和下载功能的实现,今天我们就文件上传做一个详细的总结
实现步骤:
1、新建一个JSP页面:表单必须设置:enctype="multipart/form-data"参数 upload.jsp:
<form action="" method="post" enctype="multipart/form-data">
<!--accept=".txt"标签用来确定上传的文件默认类型-->
请选择您要上传的文件:<input type="file" name="fileName" accept=".txt" /> <br/>
确认上传?<input type="submit" value="确认" /><input type="reset" value="重选" />
</form>
2、编写后端功能Servlet代码:
UploadFile.java:
具体实现思路:
--------1、设置编码方式为utf-8,获取字符流
--------2、创建DiskFileItemFactory工厂类对象,将文件封装成单独的FileItem对象
--------3、设置文件缓存目录
--------4、加载文件缓存目录,创建ServletFileUpload对象
--------5、设置文件编码为utf-8
--------6、解析request请求,得到上传文件的FileItem对象,得到的也就是所有的表单name
--------7、遍历表单name集合,判断哪一些是普通字段和文件字段,进行区分
--------8、得到所上传的文件路径名
--------9、截取文件名
--------10、设置上传的目标文件夹路径
--------11、通过字节流进行文件的对拷
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1、设置编码方式为utf-8,获取字符流
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter write = response.getWriter();
//2、创建DiskFileItemFactory工厂类对象,将文件封装成单独的FileItem对象
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
//3、设置文件缓存目录
File file = new File("C:\\Cache");
if(!file.exists()) {
//如果文件不存在,就创建一个文件
file.mkdirs();
}
diskFileItemFactory.setRepository(file); //加载文件缓存目录
//4、创建ServletFileUpload对象
ServletFileUpload fileUpload = new ServletFileUpload(diskFileItemFactory);
//5、设置文件编码为utf-8
fileUpload.setHeaderEncoding("utf-8");
//6、解析request请求,得到上传文件的FileItem对象,得到的也就是所有的表单name --->比如:这里只有一个name="fileName" 拿到的就是这个集合
List<FileItem> fileItems = null;
try {
fileItems = fileUpload.parseRequest(request);
} catch (FileUploadException e) {
e.printStackTrace();
}
//8、遍历集合
for(FileItem fileItem:fileItems) { //文本域
//判断是否为普通字段
if(fileItem.isFormField()) {
//得到字段名、字段值
String name = fileItem.getFieldName(); //
}
//为文件域
else {
//9、得到所上传的文件路径名
String fileName = fileItem.getName();
//10、截取文件名
String fiString = fileName.substring(fileName.lastIndexOf("\\")+1);
//11、设置上传的目标文件夹路径
File filedir = new File("C:\\NewFile");
if(!filedir.exists()) {
filedir.mkdir();
}
// System.out.println(user.getUserName());
File filepath = new File(filedir+"\\"+fiString);
// System.out.println(fiString);
if(!filepath.exists()) {
filepath.createNewFile();
}
//获得文件上传流
InputStream in = fileItem.getInputStream();
//使用FileOutStream打开服务器端的上传文件
FileOutputStream out = new FileOutputStream(filepath);
//流的对拷
byte[] bb = new byte[1024];
int len ;
while((len= in.read(bb))>0) {
out.write(bb, 0, len);
// out.close();
// in.close();
fileItem.delete(); //删除临时文件
}
write.println("文件上传成功<br/>");
}
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。