使用commons-fileupload实现上传

看了个视频

有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);
    }


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值