使用FileUpload上傳文件的主要Java代碼

xybw 9年前發布 | 2K 次閱讀 Java

 

import java.io.File;
import java.io.IOException;
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.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class UploadServlet extends HttpServlet {

@SuppressWarnings("unchecked")
public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    System.out.println("--------------upload-----------");

    DiskFileItemFactory factory = new DiskFileItemFactory();
    factory.setSizeThreshold(1024 * 1024); // 設置緩存大小,單位KB
    String path = request.getRealPath("/upload"); // 得到當前項目upload目錄的絕對路徑
    factory.setRepository(new File(path)); // 設置文件臨時存儲路徑為path
    ServletFileUpload upload = new ServletFileUpload(factory);
    try {
        List<FileItem> list = upload.parseRequest(request);
        for (FileItem item : list) {
            // 如果item是普通表單字段
            if (item.isFormField()) {
                String name = item.getFieldName(); // 得到表單字段的name屬性值
                String value = item.getString("gbk"); // 得到表單字段值,編碼采用gbk
                request.setAttribute(name, value);
            } else {
                String name = item.getFieldName();
                String value = item.getName(); // 得到上傳文件的路徑(根據瀏覽器不同可能會有所差異)
                int start = value.lastIndexOf("\\");
                String fileName = value.substring(start + 1); // 截取最后一個\之后的字符,即行到上傳文件名
                request.setAttribute(name, fileName);

                item.write(new File(path, fileName)); // 在硬盤上寫入文件

                // 自己用流寫的方法
                // OutputStream os = new FileOutputStream(new
                // File(path,fileName));
                // InputStream is = item.getInputStream();
                // byte[] buffer = new byte[500];
                // int length = 0;
                // while((length = is.read(buffer))>0){
                // os.write(buffer, 0, length);
                // }
                // os.close();
                // is.close();
            }
        }
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    request.getRequestDispatcher("upload/result.jsp").forward(request,
            response);
}

}</pre>

 本文由用戶 xybw 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!