Servlet上传图片(how2j

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;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.Iterator;
import java.util.List;

public class Upload extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //创建FileItem工厂
        DiskFileItemFactory factory = new DiskFileItemFactory();
        //设置缓冲区大小为1M
        factory.setSizeThreshold(1024*1024);
        //创建文件上传对象,配置factory
        ServletFileUpload upload = new ServletFileUpload(factory);

        List items = null;
        try {
            //解析上传请求
            items = upload.parseRequest(req);
        } catch (FileUploadException e) {
            e.printStackTrace();
        }

        //创建filename变量
        String filename = null;
        //获取迭代器
        Iterator iterator = items.iterator();
        while(iterator.hasNext()){

            FileItem item = (FileItem) iterator.next();
            //判断是否为普通表单类型
            //不是普通表单类型时
            if(!item.isFormField()){
                //根据系统时间戳命名
                filename = System.currentTimeMillis() + ".jpg";

                //通过getRealPath()获取上传文件夹目录
                String photoFolder = req.getServletContext().getRealPath("upload");

                //创建文件,路径为获取到的上传文件的目录,名字为根据系统时间命名的字符串
                File file = new File(photoFolder, filename);

                //获取父目录并创建文件夹
                file.getParentFile().mkdirs();

                //获取浏览器输入流
                InputStream is = item.getInputStream();

                //复制文件
                //创建文件输出流
                FileOutputStream fos = new FileOutputStream(file);
                byte[] b = new byte[1024*1024];
                int length = 0;
                while(-1 != (length = is.read(b))){
                    fos.write(b,0,length);
                }
                fos.close();
            }else {
                //普通表单类型
                //System.out.println(item.getFieldName());

                // getString()方法将FileItem对象中保存的数据流内容以一个字符串返回
                String value = item.getString();
                // tomcat默认全部都是用ISO-8859-1编码
                // 所以需要先将得到"字符"(不管是什么)都先用字节数组表示,且使用ISO-8859-1进行翻译,得到一个在ISO-8859-1编码环境下的字节数组.然后再用UTF-8编码这个数组,并翻译成一个字符串.
                value = new String(value.getBytes("ISO-8859-1"), "UTF-8");
                System.out.println(value);
            }

            String html = "<img src='uploaded/%s'/>";
            // 返回中文响应
            resp.setContentType("text/html");

            // 将数据刷新到response的缓冲区
            PrintWriter pw = resp.getWriter();

            // 输出html语句,语句为上传图片的<img>标签
            pw.format(html, filename);
        }


    }
原创文章 34 获赞 8 访问量 1175

猜你喜欢

转载自blog.csdn.net/qq_46225886/article/details/105278741