使用common-fileupload来做,使用httpservlet都可以。
以下是我自己做的,代码比较丑。(仅验证接受多文件能力,未保存文件,)
前端ajax请求代码略过,要求:post,Content-Type : multipart/form-data
导入jar包 common-fileupload(1.4)及common-io(2.2)
servlet如下
public class DemoServlet extends HttpServlet {
private FileItemFactory fileItemFactory;
@Override
public void init() throws ServletException {
super.init();
fileItemFactory = new DiskFileItemFactory();//初始化 为基于磁盘的文件项创建工厂
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//只有post请求才能传文件
ServletFileUpload sfu = new ServletFileUpload(fileItemFactory);
List parseRequest = null;
try {
parseRequest = sfu.parseRequest(req);
} catch (FileUploadException e) {
throw new ServletException(e);
}
for (FileItem fileItem : parseRequest) {
if (fileItem.isFormField()){
System.out.println(fileItem.getFieldName()+":"+fileItem.getString("UTF-8"));
}else{
System.out.println(fileItem.getFieldName()+":"+fileItem.getName());//字段名:文件名
}
}
}
}
web.xml
Archetype Created Web Application
upload
com.wilson404.DemoServlet
upload
/upload
测试请求:
curl "http://localhost:8080/demoFileUpload_war/upload" -H "Sec-Fetch-Mode: cors" -H "Origin: chrome-extension://aejoelaoggembcahagimdiliamlcdmfm" -H "___DHC-Request-Id: 16d7aea4d10" -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36" -H "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryLHrhWpvupMp7iKkU" --data-binary ^"------WebKitFormBoundaryLHrhWpvupMp7iKkU^
Content-Disposition: form-data; name=^\^"a^\^"; filename=^\^"^冲^刺^题.rar^\^"^
Content-Type: application/octet-stream^
^
^
------WebKitFormBoundaryLHrhWpvupMp7iKkU^
Content-Disposition: form-data; name=^\^"a^\^"; filename=^\^"^必^看^题.rar^\^"^
Content-Type: application/octet-stream^
^
^
------WebKitFormBoundaryLHrhWpvupMp7iKkU--^
^" --compressed
控制台输出:
a:冲刺�?.rar
a:必看�?.rar