servlet文件上传

在客户端要是实现文件上传,在form表单中要设置enctype的属性

<form method="post" enctype="multipart/form-data">

<input type="file" name="filename"></input>

<input type="submit" value="upload"></input>

</form>

在H5中我们只需要这样就可以生成一个可供选择多个文件的按钮

<input type="file" multiple></input>


在服务器上

主要是围绕MultipartConfig注解和javax.servlet.http.Part接口进行

MultipartConfig属性可以有如下几种,maxFileSize,maxRequestSize,location文件保存到磁盘指定位置,fileSizeThreshold指定溢出尺寸

HttpServletRequest定义了如下几个方法来处理多部分请求

Part getPart(String name);

Collection<Part> getParts();

String getName();

String getContentType();

getHeaderNames();

最终要的write(String path)

void delete()等等


这将以InputStream的形式返回长串文件的内容,如果html是一个文件的input元素,则Part将放回如下标头

如果输入域中名位document的note.txt

content-type:text/plain

context-disposition:form-data; name="document"; filename="note.txt"

对于非文本域,part将只返回如下标头

content-disposition:form-data;name“fieldame”

在Servlet处理上传文件是将采用如下步骤:

1.查看是否存在content-type标头,检验一个Part是普通的表单域还是文件域,我们可以调用getContentType()或者getHeader("content-type")来完成检查

2.如果有content-type标头,产看上传的文件是否为空,如果文件名是空的华就代表有文件类型的域存在但是没有要上传的文件

3.如果有文件的存在,就可以调用Part的write方法来写入磁盘

例如在服务器端

我们可以在doPost方法中这样操作

request.getPart("name");

getFileName(part)


这个函数可以这样来写

private String getFileName(Part part){
        String contentDispositionHeader = part.getHeader("content-disposition");
        String[] elements = contentDispositionHeader.split(";");
        for(String element:elements){
            if(element.startsWith("filename")){
                return element.substring(element.indexOf("=")+1).trim().replace("\"", "");
            }
        }
        return null;
        

    }

然後調用part的write方法將文件寫入到磁盤中去


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值