7月29日 文件上传

前端代码

关键点

form上必须设置这两个属性 method=“post” enctype=“multipart/form-data”
input 的type 是 type=“file”

<!DOCTYPE html>
<html>
<head>
  <title>Bootstrap 实例</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/4.1.0/css/bootstrap.min.css">
  <script src="https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js"></script>
  <script src="https://cdn.staticfile.org/popper.js/1.12.5/umd/popper.min.js"></script>
  <script src="https://cdn.staticfile.org/twitter-bootstrap/4.1.0/js/bootstrap.min.js"></script>
</head>
<body>

<form action="FileUploadDemo1Servlet" method="post" enctype="multipart/form-data">
  <p>默认上传文件样式:</p>
   <input type="file" id="myFile" name="filename2">
  <button type="submit" class="btn btn-primary">提交</button>
</form>

</body>
</html>

Servlet 后台

pom 文件添加包

<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3</version>
</dependency>

创建servelet

package com.base.servlet;

import java.io.File;
import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

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;

/**
 * Servlet implementation class FileUploadDemo1Servlet
 */
public class FileUploadDemo1Servlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public FileUploadDemo1Servlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		 	DiskFileItemFactory factory = new DiskFileItemFactory(); 
		    //当内存中文件数据达到THRESHOLD_SIZE后,就写入临时文件中,避免上传大文件时,消化太多内存 
		    ServletFileUpload upload = new ServletFileUpload(factory); 
		    upload.setHeaderEncoding("UTF-8"); 
		    upload.setSizeMax(2*1024*1024); 
		    //上传以后,文件保存的地址
		    String savePath="C:/tmp/demo1/";
		    try {
		    	// 获取 from表单里面,所有的元素
				List items = upload.parseRequest(request);
				
				//form 循环 遍历表单里面的元素集合
				for(int i=0;i<items.size();i++){
					//每个表单元素,都封装到一个FileItem类型的对象中
					FileItem fitem=(FileItem) items.get(i);
					System.out.println("元素name属性的值是="+fitem.getFieldName());
					
					//  fitem.isFormField() 表示,如果当前这个元素的类型type不等于file,那么就返回true
					if(fitem.isFormField() ){
						System.out.println("这是一个普通的非文件字段");
						System.out.println("输入框,前端输入的值是---"+fitem.getString());
						
					}else{
						
						System.out.println("这是一个文件字段");
						System.out.println("fitem.getName() 原始的文件名字--"+fitem.getName());
						//File.separator 这是一个静态的变量。 
						// 在windows的操作系统返回值是 \\  如果是linux系统,返回是一个  /
						
						
						//设置文件的名字
						String filename=System.currentTimeMillis()+"-"+fitem.getName();
						//存储上传的文件
						File file=new File(savePath+File.separator+filename);
						try {
							fitem.write(file);
						} catch (Exception e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						
					}
				}
			} catch (FileUploadException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		    
		    
		
		
	}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值