使用commons-fileupload实现上传

来源:互联网 发布:王思仪淘宝店 编辑:程序博客网 时间:2024/05/21 17:01

看了个视频

有apache组织提供的commons-fileupload ,实现上传

 jsp页面,web.xml省略

servlet

 

package com.xie.fileupload;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class FileUpload extends HttpServlet {

    @SuppressWarnings(
"unchecked")
    
public void doPost(HttpServletRequest request, HttpServletResponse response)
            
throws ServletException, IOException {
        DiskFileItemFactory factory 
= new DiskFileItemFactory();
        String path 
= request.getRealPath("/upload");
        factory.setRepository(
new File(path));
        factory.setSizeThreshold(
1024 * 1024);

        ServletFileUpload upload 
= new ServletFileUpload(factory);

        
try {
            List
<FileItem> list = upload.parseRequest(request);

            
for (FileItem fileItem : list) {
                
// 如果是表单信息
                if (fileItem.isFormField()) {
                    String name 
= fileItem.getFieldName();// 获得表单中的名字
                    String value = fileItem.getString("gbk");
                    request.setAttribute(name, value);
                }
 else {
                    String name 
= fileItem.getFieldName();
                    String value 
= fileItem.getName();// 获得从浏览器中取得的文件名字

                    
int start = value.lastIndexOf("/");
                    String fileName 
= value.substring(start + 1); // 由于不同的浏览器可能取得的文件的名字不同,有的浏览器将整个路径取道,有的浏览器只取到文件名
                    request.setAttribute(name, fileName);// 形如c:document.....txt和1.txt这两种形式,因此需要做次操作

                    
// 使用io进行文件的上传
                    /*
                     * OutputStream os = new FileOutputStream(new
                     * File(path,fileName));
                     * 
                     * InputStream in = fileItem.getInputStream();
                     * 
                     * byte[] buffer = new byte[400];
                     * 
                     * int length = 0 ;
                     * 
                     * while((length - in.read(buffer))>0) { os.write(buffer, 0,
                     * length); }
                     * 
                     * os.close(); in.close();
                     
*/


                    
// 使用fileupload提供的上传
                    try {
                        fileItem.write(
new File(path, fileName));
                    }
 catch (Exception e) {
                        e.printStackTrace();
                    }

                }

            }

        }
 catch (FileUploadException e) {
            e.printStackTrace();
        }


        request.getRequestDispatcher(
"/fileUpload/success.jsp").forward(
                request, response);
    }


}

原创粉丝点击