visualsvn 限制上传_OA系统:文件上传下载、安装(FileItem类)和使用Visual SVN

本文介绍了在Java Web项目中实现文件上传下载的详细步骤,包括使用FileItem类处理上传文件,限制上传文件大小和类型,以及保存上传信息到数据库。同时讲解了Visual SVN的安装和使用,以及在Eclipse中安装和使用Subclipse进行版本管理。
摘要由CSDN通过智能技术生成

学习主题:OA系统

学习目标:掌握web开发项目实战,熟练使用web开发基础技术

文件上传下载展示和思路

图片的上传,是把图片数据以二进制的方式放入数据库,还是把图片上传到服务器的某个目录下,数据库记录这个目录?哪种方式好?

图片上传到tomcat中webapps目录下,数据库中记录图片名称及图片类型

图片的上传下载在java中有哪些jar包支持?

commons-fileupload.jar

commons-io.jar

开始上传并理解上传API的作用

简述文件上传的步骤

创建FileItemFactory对象

创建ServletFileUpload对象

通过servletFileUpload实现上传操作,将客户端表单项封装到FileItem中

对表单项进行处理

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

System.out.println(item.isFormField());//是否是file表单项 是返回false 否返回true

System.out.println(item.getFieldName());//表单项name的属性的值

System.out.println(item.getString());//对于非file表单项,value属性的值,对于field表单项,返回文件内容

System.out.println(item.getName());//对于file表单项,上传文件的名称,对于非file表单项,返回null

System.out.println(item.getContentType());//对于file表单项,上传文件类型,对于非file表单项,返回null

System.out.println(item.getSize());//对于file表单项,上传文件的大小,对于非file表单项,返回value值的宽度

上传文件到指定目录

如何上传文件到指定目录?写出步骤

使用item.getFieldName()方法获取文件名

指定上传的文件夹(指定上传的位置)和文件名

获取指定的文件夹和文件名

使用item.write(file)上传文件到指定位置

完善上传文件到指定目录

本节课完善了文件上传的哪些点?实现代码是什么?

1.如果文件夹不存在,就创建

if(!dir.exists()){

dir.mkdirs();

}

2.为防止文件的同名覆盖,上传到服务器的文件重新命名

UUID uuid = UUID.randomUUID();

String extName = realName.substring(realName.lastIndexOf("."));

photoName = uuid.toString()+extName;

3.上传路径由物理路径变成逻辑路径,不再将路径写成固定位置

String realPath = this.getServletContext().getRealPath("/upload");

4.只能上传jpg、jpeg、gif格式文件

String contentType = item.getContentType(); //获取文件类型

photoType = item.getContentType();

if(!"image/jpeg".equals(contentType) && !"image/gif".equals(contentType)){

request.setAttribute("mess", "只能上传jpg或gif格式文件");

request.getRequestDispatcher("/add.jsp").forward(request, response);

return;

}

5.限制上传文件大小

upload.setFileSizeMax(800*1024); //单个文件的上限

upload.setSizeMax(5*800*1024); //一次上传的上限(多个)

保存上传信息到数据库

本节课要往数据库里面存哪些数据?这些数据的作用是什么?

在原有的基础上增加了realName、photoName和photoType属性,

realName属性用来展示图片的真实名称,希望客户端在下载图片的时候还是使用原来的真实名称进行下载,

photoName用来存储UUID名称,

photoType用来存储图片的类型

将服务器的图片在客户端下载

简述下载的步骤,视图层怎么写,控制层怎么写?贴出代码,并写出注释

protected void service(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

//获取学生编号

int id = Integer.parseInt(req.getParameter("id"));

//根据编号调用业务层对象查询到该学生的全部信息(包括realName,photoName,photoType)

StudentService ss = new StudentServiceImpl();

Student stu = ss.findById(id);

//通过IO流实现照片的下载(从服务器端到客户端)

//创建输入流和输出流

//静态路径

//String fileName ="D:\\bjsxtSoftWare/apache-tomcat-7.0.69/webapps\\updownload1\\upload"+stu.getPhotoName();

String realPath = this.getServletContext().getRealPath("/upload");

String fileName = realPath+"/"+stu.getPhotoName();

File file = new File(fileName);

InputStream is = new FileInputStream(file); //从服务器端读取

OutputStream os = resp.getOutputStream(); //写到客户端

//使用输入输出流完成复制操作(服务器端--客户端)

IOUtils.copy(is, os);

//关闭输入输出流

is.close();

os.close();

}

public Student findById(int idd) {

Student stu = null;

Connection conn = null;

Statement stmt = null;

ResultSet rs = null;

try {

//获取连接

conn = DBUtil.getConnection();

//发送命令或获取结果

stmt = conn.createStatement();

//处理结果

rs =stmt.executeQuery("select * from stu_Student where id = "+idd);

rs.next();

//获取各个字段的值

int id =rs.getInt("id");

String name = rs.getString("name");

int age = rs.getInt("age");

double score = rs.getDouble("score");

String realName = rs.getString("realName");

String photoName = rs.getString("photoName");

String photoType = rs.getString("photoType");

//由字段创建对象

stu = new Student(id, name, age, score,realName,photoName,photoType);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally{

//关闭资源

DBUtil.closeAll(rs, stmt, conn);

}

//返回结果

return stu;

}

完善下载操作

本节课完善了下载的哪些点?贴出对应代码和注释

protected void service(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

//获取学生编号

int id = Integer.parseInt(req.getParameter("id"));

//根据编号调用业务层对象查询到该学生的全部信息(包括realName,photoName,photoType)

StudentService ss = new StudentServiceImpl();

Student stu = ss.findById(id);

//通过IO流实现照片的下载(从服务器端到客户端)

//创建输入流和输出流

//静态路径

//String fileName ="D:\\bjsxtSoftWare/apache-tomcat-7.0.69/webapps\\updownload1\\upload"+stu.getPhotoName();

String realPath = this.getServletContext().getRealPath("/upload"); //"D:\\bjsxtSoftWare/apache-tomcat-7.0.69/webapps\\updownload1

String fileName = realPath+"/"+stu.getPhotoName();

File file = new File(fileName);

/**解决直接下载到浏览器问题*/

resp.setContentLength((int)file.length()); //文件长度

resp.setContentType(stu.getPhotoType()); //文件类型Mime

//resp.setHeader("Content-disposition", "inline"); //下载方式(默认inline,下载到浏览器上)

//解决get方式中文乱码问题(服务器端下载到浏览器到)

String realName = stu.getRealName();

String userAgent = req.getHeader("User-Agent").toLowerCase(); //获取浏览器信息

if(userAgent.indexOf("msie")>0){ //ie浏览器

realName = URLEncoder.encode(realName, "utf-8");

}else{

realName = new String(realName.getBytes("utf-8"),"iso-8859-1");

}

resp.setHeader("Content-disposition", "attachment;filename="+realName);

InputStream is = new FileInputStream(file); //从服务器端读取

OutputStream os = resp.getOutputStream(); //写到客户端

//使用输入输出流完成复制操作(服务器端--客户端)

IOUtils.copy(is, os);

//关闭输入输出流

is.close();

os.close();

}

版本管理和SVN入门

什么是版本管理?为什么需要版本管理?

版本管理指的是代码版本的管理。

只要进行团队软件开发,就会涉及代码的合并共享以及相关带来的问题,要想有效的解决问题,就需要用到版本管理。

除了svn外,还有哪些版本管理软件?

VSS、CVS、GIT

安装和使用Visual SVN

按照本节课的内容,安装svn并使用visual svn

Subclipse的安装和使用1

Subclipse的安装和使用2

简述在eclipse中安装svn插件的步骤,以及注意事项

1. 安装软件

a) 指定软件安装位置和版本库位置

b) 默认端口 443

c) 使用 SVN authentication

2. 创建版本库

a) 创建默认结构 use default struction

b) 默认结构的含义

i. trunk:主干 开发时代码存储的位置,永远是最新的代码

ii. brank:分支 在不影响 Trunk 其它用户情况下进行一些关于新功能的探索性或实验性的开发,待新功能完善后它也可以合并到 Trunk 中

iii. tags:标签 历史版本 阶段性里程碑版本 比如 1.0 2.0 3.0

3. 创建用户

4. 创建组

5. 为组指定用户

6. 为组指定对版本库的操作权限

a) 默认 everyone 具有 read/write 权限,无法删除,要修改为 no access

7. 通过浏览器访问服务器端

简述在eclipse中使用svn的方法

安装

a) 解压后将其中的 features 和 plugin 文件夹放入 MyEclipse 的 dropins 目录下

b) 重新启动 MyEclipse,即可自动发现并安装

c) 安装后在 window------preferrences---—team 中可以看到 SVN

1.提交项目到服务器端

a) 选中项目右键--------team----share project----选择 SVN

b) 提交版本位置、用户名、密码都会由相关服务器管理人员提供。

c) 可以选择记住密码,避免多次的重复输入。

d) 提交后会跳到 team synchronizing view,还需要真正同步代码到服务器,同步之前可以选择哪些代码不需要使用 svn 进行管理

e) 提交成功后可以观察版本库容量的变化

f) 提交成功后客户端项目会显示专门的标记,并且增加了相应的.svn 项目,来存储操作记录

2. 断开和服务器连接

a) team—断开连接--------从项目中删除 SVN 元信息

3. 客户端从 SVN 检出项目

a) new--- Project…--------SVN----从 SVN 检出项目

4. 更新和提交操作

a) 更新将服务器最新代码更新到本地;提交是将本地最新代码提交到服务器

b) 提交之前要先更新,因为可能其他程序员期间以及提交了最新代码到服务器

c) 提交一定要给出注释,对提交内容进行说明,作为以后辨别版本的主要依据。

5. 解决冲突

a) 模拟两个用户对一个类进行修改,分别修改相同的方法和增加一个新方法

b) 更新后出现冲突,和冲突方沟通后,对冲突文件给出最终解决方案

c) 还需要 team----标记为解决,相应冲突文件为自动删除,当前文件由冲突状态转换为已修改状态,待提交

6. 还原没有提交的代码

a) team----还原

7. 还原已经提交的代码

a) 如果最新的代码出现问题,可以直接修改,也可以回滚到之前的某个历史版本,直接使用或者进行修改

b) 查看资源历史记录

c) 根据注释确定要还原的版本,无法确定可以查看或者比较代码

d) 确定版本后,右键选择”从修订班 x 回复更改”

e) 可能出现冲突,解决后提交代码到服务器

@杜程程 BjSXT百战卓越鏖战第五十六天

今天,十字路口红绿灯下,目送告别一起在北京奋斗56天的一个同门师兄弟。

每个人都有自己的选择,无论结果怎样,我都尊重你做出的决定。

再见!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值