从表单上提交图片上传,保存到本地文件中

环境:JDK 1.8

需要导入的jar包:1.commons-fileupload-1.2.2.jar 。 2,commons-io-1.4.jar。

Html的代码:

<!DOCTYPE html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<form action="another" method="post" enctype="multipart/form-data">
   个人名称:<input type="text" name="heroName" /> <br> 
  上传头像 : <input type="file" name="filepath" /> <br> 
  <input type="submit" value="上传">
</form>

注意:这里的 enctype="multipart/form-data",一定要写。

后台代码:

  

public class UploadPhotoServlet extends HttpServlet {
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {
        String filename = null;
        try {
            /*环境:文件目录工厂—————— disk:磁盘*/
            DiskFileItemFactory factory = new DiskFileItemFactory();
            /*核心操作类:创建一个文件上传解析器。*/
            ServletFileUpload upload = new ServletFileUpload(factory);
            // 设置上传文件的大小限制为1M
            factory.setSizeThreshold(1024 * 1024);

            List items = null;
            try {
                /*解析请求体,获取请求体中的参数*/
                items = upload.parseRequest(request);
            } catch (FileUploadException e) {
                e.printStackTrace();
            }

            /*遍历*/
            Iterator iter = items.iterator();
            while (iter.hasNext()) {
                FileItem item = (FileItem) iter.next();
                /*判断item.isFormField()是否是普通类型*/
                if (!item.isFormField()) {
                    //不是普通类型,是文件类型

                    // 根据时间戳创建头像文件名称
                    filename = System.currentTimeMillis() + ".jpg";

                    //通过getRealPath获取上传文件夹,如果项目在e:/project/j2ee/web,那么就会自动获取到 e:/project/j2ee/web/uploaded
                    String photoFolder = request.getServletContext().getRealPath("uploaded");
                    System.out.println("getRealPath:" + photoFolder);

                    File f = new File(photoFolder, filename);
                    if(!f.exists()){
                        //当前文件不存在时,在当前文件的父类下创建文件
                        f.getParentFile().mkdirs();
                    }

                    // 通过item.getInputStream()获取浏览器上传的文件的输入流
                    InputStream is = item.getInputStream();

                    // 复制文件(即向文件f中写入数据)
                    FileOutputStream fos = new FileOutputStream(f);
                    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());
                    String value = item.getString();
                    //将字段对应的内容转换为utf-8;
                    value = new String(value.getBytes("ISO-8859-1"), "UTF-8");
                    //输出内容
                    System.out.println(value);
                }
            }
            //将图片输出到页面
            String html = "<img width='200' height='150' src='uploaded/%s'/> " ;
            response.setContentType("text/html");
            PrintWriter pw = response.getWriter();

            pw.format(html, filename);

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
/*嘿嘿,本人还是Java新手,如果有什么错误的地方欢迎 指出错误 */

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值