基于Servlet文件上传

本文介绍了如何使用Servlet进行文件上传,包括文件上传的六个步骤,以及项目中的具体实现示例,强调了上传表单的三个关键要素:POST方法、file字段和multipart/form-data编码类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概要

基于Servlet的文件上传

业务场景如下:

后台管理商品上架:添加商品名称,商品类型,商品颜色,商品价格,以及商品描述,最后将商品图片上传之后,点击保存,将数据保存在数据库中,并渲染在页面上

 

 上传文件表单的三要素:

1.表单method必须为post方式

2.必须要有file文件域

3.表单的enctype的值必须为multipart/form-data

<form method="post" action="UploadShopServlet" enctype="multipart/form-data">
    pname: <input type="text" name="pname"/>
    file: <input type="file" name="file">
    <input type="submit" value="upload">
</form>

Controller层

由于表单的enctype的值变成了multi-part/form-data方式,以前传统的request.getParameter("")的方式已经无法获取表单中的值
String pname =request.getParameter("pname");
String afile=request.getParameter("file");
SyStem.out.println(pname);
SyStem.out.println(afile);  (不能用)

文件上传的六个步骤

1.   创建DiskFileItemFactory对象
2.   使用DiskFileItemFactory对象作为参数创建一个ServletFileUpload对象
3.   解析请求,得到一个FileItem的一个集合对象
4.   判断表单中的内容是普通的表单域还是文件域
5.   获取文件上传的路径
6.   实现文件的上传
package com.qfedu.controller;

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.annotation.WebServlet;
import java.io.File;
import java.io.IOException;
import java.util.List;

@WebServlet(urlPatterns = "/UploadServlet")
public class UploadServlet extends javax.servlet.http.HttpServlet {
    protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {


        /**
         *
         * 1.   创建DiskFileItemFactory对象
         * 2.   使用DiskFileItemFactory对象作为参数创建一个ServletFileUpload对象
         * 3.   解析请求,得到一个FileItem的一个集合对象
         * 4.   判断表单中的内容时普通的表单域还是文件域
         * 5.   获取文件上传的路径
         * 6.   实现文件的上传
         */

        DiskFileItemFactory dfif = new DiskFileItemFactory();

        ServletFileUpload sfu = new ServletFileUpload(dfif);

        try {
            List<FileItem> list = sfu.parseRequest(request);

            System.out.println(list);

            for (FileItem fi : list) {

                if(fi.isFormField()){
                    System.out.println(fi.getFieldName() + "\t" + fi.getString());
                }else{
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值