文件上传下载和SVN使用

  1. 文件上传下载展示和思路
    (1) 图片的上传,是把图片数据以二进制的方式放入数据库,还是把图片上传到服务器的某个目录下,数据库记录这个目录?哪种方式好?
    存放在目录里比较好,图片比较大,作为二进制文件存放在数据库中比较耗数据库资源,降低了数据库的效率,有大量数据时读取速度慢,给数据库带来巨大的压力,甚至可能影响其他功能。

    (2) 图片的上传下载在java中有哪些jar包支持?
    commons-fileupload.jar
    commons-io.jar

  2. 开始上传并理解上传API的作用
    (1) 简述文件上传的步骤
    在前台页面中使用form表单提交文件,使用servletFileupload对象获取req中的表单数据,价格表单数据存放在FileItem对象的集合中,遍历集合,使用FileItem对象的isFormField方法判断是否为filed表单项,不是则使用变量接受表单中的飞filed表单项参数,通过io流将文件保存到对应的文件夹中,将文件路径保存到数据库中。

    (2) FileItem类的方法有哪些,分别是什么意思?

    1. boolean isFormField()
      isFormField方法用于判断FileItem类对象封装的数据是一个普通文本表单字段,还是一个文件表单字段,如果是普通表单字段则返回true,否则返回false。因此,可以使用该方法判断是否为普通表单域,还是文件上传表单域。
    2. String getName()
      getName方法用于获得文件上传字段中的文件名。
      注意IE或FireFox中获取的文件名是不一样的,IE中是绝对路径,FireFox中只是文件名。
    3. getContentType()
      getContentType方法用于获取文件表单中的文件类型
    4. write()
      write方法用于将FileItem对象中保存的主体内容保存到某个指定的文件中。
    5. getSize()
      返回该上传文件的大小(以字节为单位)。
  3. 上传文件到指定目录
    (1) 如何上传文件到指定目录?写出步骤
    创建file对象,指定文件的路径,同过FileItem类的write()方法将文件写入到对于的file。

  4. 完善上传文件到指定目录
    (1) 本节课完善了文件上传的哪些点?实现代码是什么?

    1. 文件夹不存在时,创建文件夹
    2. 解决了文件的同名覆盖,使用uuid生成不重复的名字
    3. 有逻辑路径得到逻辑路径,提高灵活性
    4. 限制文件上传的类型
    5. 限制文件上传的大小(上传之后显示)
    6. 限制文件上传的大小(上传之前显示)
  5. 保存上传信息到数据库
    (1) 本节课要往数据库里面存哪些数据?这些数据的作用是什么?
    存入图片保存的路径,用于在前台页面显示图片。
    图片原本的名称 ,用于下载图片是回显图片名称
    图片类型。 下载是设置图片类型

  6. 将服务器的图片在客户端下载
    (1) 简述下载的步骤,视图层怎么写,控制层怎么写?贴出代码,并写出注释
    视图层:

  	<!--输出所有的学生信息 -->
  	<a  href="add.jsp">添加学生信息</a>

   		<table align="center" border="1" width="70%">
   		<tr>
   			<th>编号</th>
   			<th>姓名</th>
   			<th>年龄</th>
   			<th>分数</th>   
   			<th>照片</th>   		
   			<th>下载</th>
   		</tr>   		
   		<c:forEach items="${requestScope.stuList2}" var="stu" >
   			<tr>
   				<td>${stu.id}</td>
   				<td>${stu.name }</td>
   				<td>${stu.age }</td>
   				<td>${stu.score}</td>  
   				<td><img alt="" src="upload/${stu.photoName }" width="100px"></td>   			
   				<td>
   					<a href="upload/${stu.photoName }">下载1</a>
   					<a href="servlet/DownServlet?id=${stu.id}">下载2</a>
   				</td>
   			</tr>   			
   		</c:forEach>    		     			
   	</table>

控制层:

protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//1.获取学生的编号
		int id = Integer.parseInt(request.getParameter("id"));
		
		//2.根据编号调用业务层查询到该学生的所有信息(包括realName,photoName,photoType)
		StudentService  stuService = new StudentServiceImpl();
		Student stu = stuService.findById(id);
		
		//3.通过IO流实现照片下载(从服务器端到客户端)
		//3.1创建一个输入流和输出流
		String realPath = this.getServletContext().getRealPath("/upload");
		//String fileName = "D:\\Java/apache-tomcat-7.0.79/webapps/updownload1\\upload\\"+stu.getPhotoName();
		String fileName = realPath+"/"+stu.getPhotoName();
		File file = new File(fileName);
		
		response.setContentLength((int)file.length());//文件长度
		response.setContentType(stu.getPhotoType());//MIME类型
		//response.setHeader("Content-disposition", "inline");//!!!! attachment
		
		String realName = stu.getRealName();//霓凰郡主.jpg
		String userAgent = request.getHeader("User-Agent").toLowerCase();
		
		if(userAgent.indexOf("msie")>=0){
			realName = URLEncoder.encode(realName, "utf-8");
		}else{
			realName = new String(realName.getBytes("utf-8"),"iso-8859-1");//???
		}
		
		
		response.setHeader("Content-disposition", "attachment;filename="+realName);
		InputStream is = new FileInputStream(file);  //读服务器端一个文件
		OutputStream os = response.getOutputStream(); //写到客户端
		
		//3.2使用输入流和输出流完成复制操作(服务器端-----客户端)
		IOUtils.copy(is, os);
		//3.3关闭输入流是输出流
		is.close();
		os.close();
		
		
		//表单 method= get 表单提交的中文乱码解决
		
		//request.setCharacterEncoding("utf-8");//post
		//String name = request.getParameter("name");
//		byte [] bytes = name.getBytes("iso-8859-1");
//		name = new String(bytes,"utf-8");
		//name = new String(name.getBytes("iso-8859-1"),"utf-8");
		
	}
  1. 完善下载操作
    (1) 本节课完善了下载的哪些点?贴出对应代码和注释

    1. 下载的文件直接显示,而不是提示下载。
      response.setHeader(“Content-disposition”, “attachment;filename=”+realName);
    2. 文件名中文乱码
      Get方式:
      name = new String(name.getBytes(“iso-8859-1”),“utf-8”);
      post方式:
      request.setCharacterEncoding(“utf-8”);
    3. 完善文件保存的路径
  2. 版本管理和SVN入门
    (1) 什么是版本管理?为什么需要版本管理?
    版本管理是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。
    为什么需要?
    解决以下问题
    i. 代码如何合并(手工合并几乎不可能)
    ii. 历史版本的保存
    iii. 跟踪哪些代码是谁修改

    (2) 除了svn外,还有哪些版本管理软件?
    a) VSS:Microsoft 提供,Window 平台,小型开发团队所适合的工具。
    b) CVS:开源工具,跨平台。绝大多数 CVS 服务已改用 SVN。CVS 已停止维护
    c) SVN(Subversion):开源,跨平台,在 CVS 的基础上开发。使用企业众多,稳定安全,操作简单。集中式版本控制系统。
    d) GIT:开源的分布式版本控制系统,用以有效高速的处理从很小到非常大的项目版本管理。(GITHUB 是一个用 GIT 做版本控制的项目托管平台,B/S 架构。放到 GITHUB 上的代码需要开源,并且是互联网开发)

  3. 安装和使用Visual SVN
    (1) 按照本节课的内容,安装svn并使用visual svn

  4. Subclipse的安装和使用2
    (1) 简述在eclipse中安装svn插件的步骤,以及注意事项
    a) 解压后将其中的 features 和 plugin 文件夹放入 MyEclipse 的 dropins 目录下
    b) 重新启动 MyEclipse,即可自动发现并安装
    c) 安装后在 window------preferrences——team 中可以看到 SVN
    注意:一定要重启

    (2) 简述在eclipse中使用svn的方法
    上传项目:
    1.在eclipse中,从show view里调出SVN资源库视图
    2.在SVN资源库窗口的空白位置右键选择新建资源库位
    3.填好服务器的地址
    4.资源库导入成功,SVN资源库视图下出现导入的资源库
    5.新建project
    6.写好project的初始版本
    7.右键project --> team --> share project
    8.选择repository类型为SVN --> 点击next
    9.使用已有资源库位置
    10.使用项目名称作为文件夹名 --> 点击Finish --> 输入用户名和密码(此步不一定每个人都有)
    11.自由选择是否打开synchronize视图
    12.右键project --> team --> 提交
    13.自由选择是否写日志(建议写)
    14.点击OK --> 上传到服务器成功,此时刷新资源库,资源库下出现上传的project
    下载项目:
    1.在资源库视图点击资源库左边的小三角形后出现该资源库下的所有project
    2.选择要下载的project右键 --> 检出为
    3.自由选择是否更改属性(建议使用默认) --> Finish --> 下载成功
    从服务器更新代码:
    1.右键项目project–>与资源库同步
    2.选择打开Synchronize视图
    3.与本地代码有不同的服务器代码将显示在Synchronize视图下,双击可以查看本地代码和服务器代码的对比,加号的为新增的文件(本地还没有)
    4.将模式切换到Incoming Mode,这个模式下的代码都是服务器更新的代码,需要下载到本地的,右键要更新的文件–>team–>更新
    5.如果出现下图这个符号,则代表本地代码和服务器代码有冲突(即:本地代码在未更新到最新版本的情况下,对代码进行了更改;或者在你对a.java写代码的期间,有人往服务器上传了新的a.java代码,使得代码间出现了冲突)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值