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


    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

方圆想当图灵

嘿嘿,小赏就行,不赏俺也不争你

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值