主要实现了文件上传的uploadServlet,以及uploadDownload.jsp
上传文件功能实现的代码:
1.用apache的commons-fileupload组件实现
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
- //判断类型
- boolean isMultipart = ServletFileUpload.isMultipartContent(req);
- if(isMultipart){
- FileItemFactory factory = new DiskFileItemFactory();
- ServletFileUpload upload = new ServletFileUpload(factory);
- try {
- List items = upload.parseRequest(req);
- Iterator iter = items.iterator();
- while(iter.hasNext()){
- FileItem item = (FileItem)iter.next();
- if(item.isFormField()){
- processFormField(item);
- req.getRequestDispatcher("/main.jsp").forward(req, resp);
- }else{
- if(processUploadFile(item,req)){
- req.getSession(true).setAttribute("fileUpload","success fileUpload");
- }else{
- req.getSession(true).setAttribute("fileUpload","failure fileUpload");
- }
- }
- }
- if(req.getSession(true).getAttribute("fileUpload").equals("success fileUpload")){
- resp.sendRedirect(req.getContextPath()+"/uploadDownload.jsp");
- }else{
- resp.sendRedirect(req.getContextPath()+"/uploadDownload.jsp");
- }
- } catch (FileUploadException e) {
- e.printStackTrace();
- }
- }
- }
- public boolean processUploadFile(FileItem item, HttpServletRequest req){
- if(!item.isFormField()){
- String fileName = item.getName();
- fileName = fileName.substring(fileName.lastIndexOf("\\")+1);
- System.out.println("fileName:"+fileName);
- if(fileName.equals("")||fileName.equals(null)){
- System.out.println("match");
- return false;
- }
- String root = getServletContext().getRealPath("/");
- File path = new File(root + "/WEB-INF/uploads/" + req.getSession(true).getAttribute("username"));
- if(!path.exists()){
- path.mkdirs();
- }
- File uploadFile = new File(path+"/"+fileName);
- System.out.println(uploadFile);
- try {
- item.write(uploadFile);
- } catch (Exception e) {
- e.printStackTrace();
- }
- FileOutputStream uploadZipFileOutputStream = null;
- try {
- uploadZipFileOutputStream = new FileOutputStream(path+"/"+fileName+".zip");
- } catch (FileNotFoundException e1) {
- e1.printStackTrace();
- }
- ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(uploadZipFileOutputStream));
- byte[] data = new byte[1000];
- try {
- BufferedInputStream in = new BufferedInputStream(new FileInputStream(uploadFile));
- int count;
- try {
- out.putNextEntry(new ZipEntry(fileName+".zip"));
- while((count = in.read(data,0,1000)) != -1){
- out.write(data,0,count);
- }
- in.close();
- out.flush();
- out.close();
- System.out.println("Your file is zipped!");
- } catch (IOException e) {
- e.printStackTrace();
- }
- } catch (FileNotFoundException e1) {
- e1.printStackTrace();
- }
- uploadFile.delete();
- }
- return true;
- }
- public void processFormField(FileItem item){
- if(item.isFormField()){
- String name = item.getFieldName();
- String value = item.getString();
- if(name.equals("storyName")){
- }else if(name.equals("writer")){
- }else if(name.equals("description")){
- }
- }
- }
上传文件实现的页面:
1上传的页面包括 label+file+input,可以上传多个文件,点击按钮,可以动态添加一栏上传文件的标记
- <%@ page language="java" contentType="text/html; charset=utf-8"
- pageEncoding="utf-8"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <title>upload and download file page</title>
- <script type="text/javascript">
- var i = 2;
- function addFileUploadTag()
- {
- var br = document.createElement("br");
- document.getElementById("file"+(i-1)).appendChild(br);
- var dynDiv = document.createElement("div");
- dynDiv.id = "file"+i;
- var label = document.createElement("label");
- label.innerHTML = "Story"+(i++)+":";
- var file = document.createElement("input");
- file.type = "file";
- file.name = "file"+(i-1);
- file.size = "5";
- var formCom = document.getElementById("form01");
- dynDiv.style.height = "20px";
- dynDiv.style.width = "300px";
- dynDiv.style.display = "inline";
- var labelStoryName = document.createElement("label");
- labelStoryName.innerHTML = "storyName:";
- var storyName = document.createElement("input");
- storyName.type="text";
- storyName.name = "storyName";
- var labelWriter = document.createElement("label");
- labelWriter.innerHTML = "writer:";
- var writer = document.createElement("input");
- writer.type="text";
- writer.name="writer";
- var labelDescription = document.createElement("label");
- labelDescription.innerHTML = "description:";
- var description = document.createElement("textarea");
- description.name = "description";
- var labelCover = document.createElement("cover");
- labelCover.innerHTML = "cover:";
- var cover = document.createElement("input");
- cover.type = "file";
- cover.name = "cover" + (i-1);
- cover.size = "5";
- dynDiv.appendChild(label);
- dynDiv.appendChild(file);
- dynDiv.appendChild(labelStoryName);
- dynDiv.appendChild(storyName);
- dynDiv.appendChild(labelWriter);
- dynDiv.appendChild(writer);
- dynDiv.appendChild(labelDescription);
- dynDiv.appendChild(description);
- document.getElementById("file"+(i-2)).appendChild(dynDiv);
- }
- </script>
- </head>
- <body>
- <h1>upload list:</h1>
- <h2 style="color:red;">Attention:all upload files will be stored in zip format in server.</h2>
- <hr>
- <form id="form01" method="post" action="upload" ENCTYPE="multipart/form-data">
- <div id="file1">
- Story1:<input id="file111" type="file" name="story1" size="5"/>
- storyName:<input type="text" name="storyName"/>
- writer:<input type="text" name="writer"/>
- description:<textarea rows="" cols="" name="textArea"></textarea>
- </div>
- <div id = "button">
- <input type="button" value="addAnotherFile" onclick="addFileUploadTag();"/>
- <input type="submit" value="clickToUploadAll"/>
- </div>
- </form>
- <h1>fileUploadResult:${sessionScope.fileUpload}</h1>
- <hr>
- <h1>download list</h1>
- </body>
- </html>
需要实现的功能:把图片预览,导入上来,把上传的文件保存到数据库中,路径保存到表中,实现注册功能。
转载于:https://blog.51cto.com/learnjava/865933