0_SmartUpload 文件上传
程序员文章站
2022-03-04 22:58:52
...
????需求:在前端页面上传文件到服务器
1. 将jar包添加到项目中:
百度网盘链接:https://pan.baidu.com/s/1erl-9BmC7kQHtRHeHEnFkw 提取码:6nbj
2. 前端页面准备上传的页面
<!--form表单中添加enctype属性: 以字节方式上传-->
<!--提交方式: post 不限制文件大小-->
<form action="/upload" method="post" enctype="multipart/form-data">
名称:<input type="text" name="fileName"/><br>
文件:<input type="file" name="myFile"/><br>
<input type="submit" value="上传"/>
</form>
3.服务器端进行处理
@WebServlet("/upload")
public class UploadServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.对象创建:
SmartUpload smartUpload = new SmartUpload();
//2.初始化
//通过工具类获取工厂对象
JspFactory factory = JspFactory.getDefaultFactory();
//通过工厂对象获取pageContent内置对象:传入7个参数(请求的Servlet,当前请求,当前响应,错误页面的url,session会话,缓冲区大小,是否自动刷新)
PageContext pageContext = factory.getPageContext(this,req,resp,null,false,1024*5,true);
smartUpload.initialize(pageContext);
//3.设置编码方式
smartUpload.setCharset("utf-8");
//4.上传(此时在服务器)
try {
smartUpload.upload();
} catch (SmartUploadException e) {
e.printStackTrace();
}
//5.保存文件
//获取单个文件
File file = smartUpload.getFiles().getFile(0);
//6.得到文件的基本信息
String fileName = file.getFileName();
String type = file.getContentType();
System.out.println("type="+type);
//7.指定服务器保存文件的路径
String url = "uploadFile/"+fileName;
//8.保存文件
//保存路径+方式
try {
file.saveAs(url,SmartUpload.SAVE_VIRTUAL);
} catch (SmartUploadException e) {
e.printStackTrace();
}
//9.是否保存成功-->如果上传成功,则页面显示该文件
req.setAttribute("fileName",fileName);
//10.测试:除文件以外的内容如何获取(名称等)
String name = smartUpload.getRequest().getParameter("fileName");
System.out.println("fileName1=" + name);
//11.跳转页面
req.getRequestDispatcher("/success.jsp").forward(req,resp);
}
}
注:
(1)此时如果表单中有其他数据时,不能通过request直接获取,需要通过SmartUpload对象
获取
String name=su.getRequest().getParameter("bookName");
并且该代码要在SmartUpload操作完成后添加 。
(2)解决乱码:
new String(name.getBytes("GBK"),"utf-8")
注:斜杠方向:/
/1. 获取内置对象时传入的7个参数的含义
public abstract PageContext getPageContext(Servlet var1,
ServletRequest var2,
ServletResponse var3,
String var4,
boolean var5,
int var6,
boolean var7);
/2. smartupload常用方法
1)执行上传和下载的初始化工作:initialize
2)设置编码方式: setCharset
3)文件数据的上传: upload
初始化之后执行
4)得到文件数组:getFiles
得到单个文件: smartUpload.getFiles().getFile(0)
保存文件方法: file.saveAs(url,SmartUpload.SAVE_VIRTUAL);