网站首页 > java教程 正文
1 文件上传
<input type="file">标签的使用需要注意以下两点。? 必须要设置input输入项的name属性,否则浏览器将不会发送上传文件的数据。? 必须将表单页面的 method 属性设置为 post 方式,enctype 属性设置为“multipart/form-data”类型。
实现步骤:
1.在项目的WEB-INF/lib目录下导入JAR包commons-fileupload-1.3.1.jar和commons-io-2.4.jar
2.项目的classpath添加commons-fileupload-1.3.1.jar和commons-io-2.4.jar
代码如下:
// 上传文件的Servlet类
@WebServlet("/UploadServlet")
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request,HttpServletResponse response)throws
ServletException,IOException{
try{
// 设置ContentType字段值
response.setContentType("text/html;charset=utf-8");
// // 创建DiskFileItemFactory工厂对象
DiskFileItemFactory factory = new DiskFileItemFactory();
// //设置文件缓存目录,如果该目录不存在则新创建一个
File f = new File("E:\\TempFolder");
if (!f.exists()) {
f.mkdirs();
}
// 设置文件的缓存路径
factory.setRepository(f);
// 创建 ServletFileUpload对象
ServletFileUpload fileupload = new ServletFileUpload(factory);
//设置字符编码
fileupload.setHeaderEncoding("utf-8");
// 解析 request,得到上传文件的FileItem对象
List<FileItem> fileitems =fileupload.parseRequest(request);
//获取字符流
PrintWriter writer = response.getWriter();
// 遍历集合
for (FileItem fileitem : fileitems) {
// 判断是否为普通字段
if(fileitem.isFormField()) {
// 获得字段名和字段值
String name = fileitem.getFieldName();
if(name.equals("name")){
//如果文件不为空,将其保存在value中
if(!fileitem.getString().equals("")){
String value = fileitem.getString("utf-8");
writer.print("上传者:" + value + "<br />");
}
}
}else
{
// 获取上传的文件名
String filename = fileitem.getName();
//处理上传文件
if(filename != null && !filename.equals("")){
writer.print("上传的文件名称是:" + filename + "<br />");
// 截取出文件名
filename = filename.substring(filename.lastIndexOf("\\")+ 1);
// 文件名需要唯一
filename = UUID.randomUUID().toString() + "_" +filename;
// 在服务器创建同名文件
String webPath = "/upload/";
//将服务器中文件夹路径与文件名组合成完整的服务器端路径
String filepath = getServletContext().getRealPath(webPath +filename);
//创建文件
File file = new File(filepath);
file.getParentFile().mkdirs();
file.createNewFile();
// 获得上传文件流
InputStream in = fileitem.getInputStream();
// 使用FileOutputStream打开服务器端的上传文件
FileOutputStream out=new FileOutputStream(file);
// 流的对拷
byte[] buffer = new byte[1024];
//每次读取1个字节
int len;
//开始读取上传文件的字节,并将其输出到服务端的上传文件输出流中
while ((len = in.read(buffer)) > 0)
out.write(buffer, 0, len);
// 关闭流
in.close();
out.close();
// 删除临时文件
fileitem.delete();
writer.print("上传文件成功!<br />");
}
}
}
}
catch(Exception e)
{
throw new RuntimeException(e);
}
}
猜你喜欢
- 2024-10-31 JAVA 超大文件上传解决方案:分片断点上传(一)
- 2024-10-31 「Java」对文件或文件夹进行重命名
- 2024-10-31 H5+JAVA的文件上传,断点续传(h5+java的文件上传,断点续传怎么解决)
- 2024-10-31 Java--利用TCP实现文件上传(java tcp数据传输)
- 2024-10-31 SpringMVC实现文件上传「传统方式上传、跨服务器上传」
- 2024-10-31 Java--优化利用TCP实现文件上传(多线程)
- 2024-10-31 JAVA大文件分片上传/多线程上传功能
- 2024-10-31 JAVA大文件(视频)切割上传(java如何处理大文件)
- 2024-10-31 JAVA实现大文件传输(java上传大文件)
- 2024-10-31 JAVA上传文件夹到OSS(java上传文件夹到指定目录怎么弄)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)