Java 文件上传与下载

JSP文件

必须 包括 enctype="multipart/form-data" method="post" type="file" 缺一不可。 


        <h1>添加图书</h1><br>
        <form action="bookAdd"enctype="multipart/form-data" method="post">
            <div class="form-group">
                <label>图书名称:</label>
                <input type="text" class="form-control" name="name" />
            </div>
            <div class="form-group">
                <label>图书图片</label>
                <input type="file" class="img-responsive" name="img">
            </div>
            <div class="form-group">
                <label>图书作者:</label>
                <input type="text" class="form-control" name="author" />
            </div>
            <div class="form-group">
                <label>出版社:</label>
                <input type="text" class="form-control" name="publish" />
            </div>
            <div class="form-group">
                <label>价格:</label>
                <input type="text" class="form-control" name="price" />
            </div>
            <div class="form-group">
                <input type="submit" class="btn btn-info" value="提交" />
            </div>
        </form>


Servlet文件 由于enctype="multipart/form-data" 因此 String name = request.getParameter("name")是获取不到值的。(在jsp+servlet模式下这样,在springMVC下是可以获取到name值的)

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    Book book = new Book();
    HashMap<String, String> map = new HashMap<String, String>();

    String realPath = getServletContext().getRealPath("/upload");
    File file = new File(realPath);
    if (!file.exists()){
        file.mkdir();
    }

    DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
    ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
    servletFileUpload.setHeaderEncoding("UTF-8");
    try {
        List<FileItem> fileItems = null;
            fileItems = servletFileUpload.parseRequest(request);
        for (FileItem fileItem : fileItems) {
            if (fileItem.isFormField()){
               //普通表单内容
                String fieldName = fileItem.getFieldName();
                String value = fileItem.getString("UTF-8");
                map.put(fieldName,value);
            }
            else{
                String imgName = fileItem.getName();
                if (imgName==null||"".equals(imgName)){
                    continue;
                }else {

                    book.setImg(imgName);

                    InputStream is = fileItem.getInputStream();
                    FileOutputStream fos = new FileOutputStream(realPath+File.separator+imgName);
                    byte[] bytes =new byte[1024];
                    int len;
                    while ((len=is.read(bytes))!=-1){
                        fos.write(bytes,0,len);
                        fos.flush();
                    }

                    fos.close();
                    is.close();
                }
            }
        }
    } catch (FileUploadException e) {
        e.printStackTrace();
    }

    book.setName(map.get("name"));
    book.setAuthor(map.get("author"));
    book.setPublish(map.get("publish"));
    book.setPrice(Double.parseDouble(map.get("price")));
    System.out.println(book);
    BookDao bookDao = new BookDaoImpl();
    boolean b = bookDao.bookAdd(book);
    if (b==true){
        response.sendRedirect("HomeServlet");
    }
}

在有多个表单内容时 将属性名和存入到Map表中 是最好的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值