2021-03-29

本周博客

主要针对上传和下载做一下总结。

上传文件

1:首先导入两个jar包
在maven网址上搜索
Apache-commons-fileupload.jar
和Apache-commons-io.jar

代码部分

注意:由于个别原因,请勿ctrl+c

前端JSP

表单提交方式必须为post,因为get输入地址栏中只有4k的容量,不足以容纳文件,造成上传受阻。
在表单中必须增加一个属性 (编码类型)enctype=“multipart/form-data”
至此前台搞定。

      <form action="UploadServet" method="post" enctype="multipart/form-data">
    学号:<input name="sno" /><br/>
    姓名:<input name="sname" /><br/>
    上传图片:<input type="file" name ="spicture"/>
    <br/>          
        <input type="submit" value ="注册"/>  
          </form>

后端Servlet

注意:由于个别原因,请勿ctrl+c

public class UploadServet extends HttpServlet {
	private static final long serialVersionUID = 1L;
 
    public UploadServet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=UTF-8");
      
		//上传
		try {
		boolean  isMultipart= ServletFileUpload.isMultipartContent(request);
		if(isMultipart) {//判断前台的form是否有multipart属性
			//FileItemFactory factory = new DiskFileItemFactory();
			DiskFileItemFactory factory = new DiskFileItemFactory();
			
			ServletFileUpload upload =new ServletFileUpload(factory);
			//通过parseRequest解析form中的所有请求字段,并保存到iems集合中(既前台传递的sno)
		    List<FileItem>items = upload.parseRequest(request);
		    //遍历items中的数据(sno sname spicture)
		    Iterator<FileItem> iter =items.iterator();
		    while(iter.hasNext()) {
		    	FileItem item =iter.next();
		    	String itemName =item.getFieldName();
		    	int sno=-1;
		    	String sname=null;
		    	//判断前台字段 是普通form表单字敦(sno sname),还是文件字段
		    	if(item.isFormField()) {
		    		if(itemName.equals("sno")) {//根据name属性 判断item是sno snamehi还是spicture
			    		sno=Integer.parseInt(item.getString("UTF-8"));
			    	}else if(itemName.equals("sname")) {
			    		sname=item.getString("UTF-8");
			    	}else {
			    		System.out.println("其他字段。。。");
			    	}
		    	}
		    		//获取文件内容并上传
		    		//文件定义路径,指定上传的位置(服务器路径)
		    		String path = request.getSession().getServletContext().getRealPath("upload");
		    		File file =new File(path,fileName);
		    		item.write(file);//上传
		    		System.out.println(fileName+"上传成功!");
		    		return;
		    	}
		    	
		    	
		    	
		    }
		    
		
		}
		}catch(FileUploadException e) {
			e.printStackTrace();
		}
		
		
		catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	
	}
	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

注意问题:
上传的目录upload:
1.如果修改代码,则在tomcat重新启动时,会被删除
原因:当修改代码时,tomcat会重新编译一份class并重新部署,创建各种目录。
2.如果不修改代码,则不会删除
原因:没有修改代码,class任然时之前的class

因此,为了防止上传目录丢失:a。虚拟路径 b.直接更换上传目录 到非tomcat目录。

限制上传:
类型,大小,注意:对文件的限制条件写再parseRequest之前

3.下载:不需要依赖任何jar
a.请求(地址 a form),请求Servlet
b.Servlet通过文件的地址 将文件转为输入流 读到Serrvlet中。 c.通过输入流 将刚才已经转为输入流的文件 输出给用户
注意:下载文件。需要设置两个响应头

因为本次博客内容仅仅方便作者回顾使用,需要详细内容请https://www.bilibili.com/video/BV18s411u7EH?p=36&spm_id_from=pageDriver

我与你像星辰守护大海
直到那天
你撞上一颗恒星
我的眼中便没了你的光影

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值