码迷,mamicode.com
首页 > 其他好文 > 详细

文件读取下载小例子

时间:2017-10-29 12:54:20      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:解析   rtc   https   sts   小例子   index   循环   response   substr   

package sevlet3;
 
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
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.tomcat.util.http.fileupload.FileItem;
import org.apache.tomcat.util.http.fileupload.RequestContext;
 
import org.apache.tomcat.util.http.fileupload.disk.DiskFileItemFactory;
import org.apache.tomcat.util.http.fileupload.servlet.ServletFileUpload;
 
public class UnloadHandleServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
 
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //得到文件的上传保存目录,将上传的文件保存在WEB-INF目录下,不允许外界访问,保证上传文件的安全
        String savePath = this.getServletContext().getRealPath("/WEB-INF/upload");
        //创建抽象文件
        File file = new File(savePath);
        //判断文件的保存目录是否存在
        //idDirectory是判断savePath是不是目录 (是返回true);
        if(!file.exists()&&!file.isDirectory()){
            System.out.println(savePath+"目录不存在,需要创建");
            //创建目录
            file.mkdir();
        }
        //消息提示
        String message ="";
        try {
            //创建一个DiskFileItemFactory工厂
            DiskFileItemFactory factory = new DiskFileItemFactory();
            //创建一个文件上传解析器对象
            ServletFileUpload upload = new ServletFileUpload(factory);
            //解决上传文件名中的中文乱码
            upload.setHeaderEncoding("UTF-8");
            //判断提交的数据是不是上传表单的数据 设置最大上传大小,用于判断是普通表单,还是带文件上传的表单。
            if(!ServletFileUpload.isMultipartContent(request)){
                return;//如果不带文件表单就直接返回 不继续运行
            }
            //带文件继续
            List<FileItem> list = upload.RequestContext((RequestContext) request);//得到所有的文件
            for(FileItem item : list){
                if(item.isFormField()){//判断表单是否是普通类型的,else就是file类型的
                    String name= item.getFieldName();
                    String value = item.getString("UTF-8");//解决中文乱码问题
                    System.out.println(name + "=" +value);
                }else {
                    String filename = item.getName();//得到上传文件的名称
                    System.out.println(filename);
                    if(filename==null || filename.trim().equals("")){
                        continue;
                    }
                    //处理获取到的上传文件中的文件名路径部分,只保留文件名部分
                    filename = filename.substring(filename.lastIndexOf("\\")+1);
                    //获取item中的上传文件的输入流
                    InputStream in = item.getInputStream();
                    //创建一个文件的输出流
                    FileOutputStream out = new FileOutputStream(savePath + "\\" + filename);
                    //创建一个缓冲区
                    byte buffer[] = new byte[1024];
                    //判断输入流中的数据是否已经读完的标识
                    int len = 0;
                    //循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据
                    while((len=in.read(buffer))>0){
                    //使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\" + filename)当中
                        out.write(buffer,0,len);
                    }
                    //关闭输入流
                    in.close();
                    //关闭输出流
                    out.close();
                    //删除处理文件上传时生成的临时文件
                    item.delete();
                    message = "文件上传成功!";
                }
            }
                    
        } catch (Exception e) {
            message = "文件上传失败!";
            e.printStackTrace();
        }
        request.setAttribute("message", message);
        request.getRequestDispatcher("/message.jsp").forward(request,response);
        }
 
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    
    }
 
}

文件读取下载小例子

标签:解析   rtc   https   sts   小例子   index   循环   response   substr   

原文地址:http://www.cnblogs.com/nzhbk/p/7749612.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!