1.网络静态U盘项目:

   struts.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.multipart.maxSize" value="209715200"></constant>
<package name="udisk" extends="struts-default">
<global-results>
<result name="error">/error.jsp</result>
</global-results> <!-- 配置struts2的异常映射 -->
<global-exception-mappings>
<exception-mapping result="error" exception="java.lang.Exception"></exception-mapping>
</global-exception-mappings> <action name="user-*" class="cn.zzsxt.udisk.action.UserinfoAction" method="{1}">
<result type="redirect">/login.jsp</result>
<result name="login" type="redirect">/login.jsp</result>
<result name="list" type="redirectAction">file-list</result>
</action>
<action name="file-*" class="cn.zzsxt.udisk.action.FileinfoAction" method="{1}">
<result name="list">/list.jsp</result>
<result name="success" type="redirectAction">file-list</result>
<!-- 下载 -->
<result type="stream" name="download">
<!-- inputName="输入流的名称",回掉action中getInputStream()方法获取输入流 -->
<param name="inputName">inputStream</param>
<!--contentType="文件类型" application/octet-stream代表对下载类型不限制 -->
<param name="contentType">application/octet-stream</param>
<!-- attachment:以附件方式保存 filename="保存的文件名称" ${fileName}获取action中fileName属性的值 -->
<param name="contentDisposition">attachment;filename=${fileName}</param>
</result>
</action>
</package>
</struts>

  FileinfoAction:

package cn.zzsxt.udisk.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.List;
import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.SessionAware; import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport; import cn.zzsxt.udisk.model.Fileinfo;
import cn.zzsxt.udisk.model.Userinfo;
import cn.zzsxt.udisk.service.IFileinfoService;
import cn.zzsxt.udisk.service.impl.FileinfoServiceImpl; public class FileinfoAction extends ActionSupport implements SessionAware,ServletRequestAware{
private IFileinfoService fileinfoService =new FileinfoServiceImpl();
private Map<String,Object> session;
private HttpServletRequest request;
private File[] upload;//接收上传的文件信息
private String[] uploadFileName;//接收上传文件的名称
private int fileId;
private String fileCode;//提取码
private String fileName;//文件名称
//结合stream结果视图完成下载功能
private InputStream inputStream; public File[] getUpload() {
return upload;
}
public void setUpload(File[] upload) {
this.upload = upload;
}
public String[] getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(String[] uploadFileName) {
this.uploadFileName = uploadFileName;
} public int getFileId() {
return fileId;
}
public void setFileId(int fileId) {
this.fileId = fileId;
} public String getFileCode() {
return fileCode;
}
public void setFileCode(String fileCode) {
this.fileCode = fileCode;
} public InputStream getInputStream() {
return inputStream;
}
public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
} public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
/**
* 查询用户的文件列表
* @return
* @throws Exception
*/
public String list() throws Exception {
//从session中获取用户信息
Userinfo user = (Userinfo)session.get("loginUser");
if(user!=null){
int userId = user.getUserId();
List<Fileinfo> list = fileinfoService.findFileinfoByUserId(userId);
request.setAttribute("list", list);
}
return "list";
}
/**
* 文件的上传
* @return
*/
public String upload() throws Exception{
//获取登陆用户信息
Userinfo user = (Userinfo)session.get("loginUser");
String path = request.getServletContext().getRealPath("/");
Fileinfo[] files = new Fileinfo[upload.length];
for(int i=0;i<files.length;i++){
Fileinfo file = new Fileinfo();
file.setFileName(uploadFileName[i]);//设置文件名称
file.setFileSize(upload[i].length());//设置文件大小
file.setFilePath(path+"upload\\"+user.getUserName()+"\\"+uploadFileName[i]);
file.setUserId(user.getUserId()); //file.setUserinfo(user);
files[i]=file;
}
int count = fileinfoService.uploadFile(files, user, path, upload);
if(count>0){
return this.SUCCESS;
}
return this.ERROR;
} /**
* 删除文件
* @return
* @throws Exception
*/
public String delete() throws Exception{
int count = fileinfoService.removeFile(fileId);
if(count>0){
return this.SUCCESS;
}
return this.ERROR;
} /**
* 下载
* @return
* @throws Exception
*/
public String download() throws Exception{
//根据提取码获取文件信息
Fileinfo downloadFileinfo = fileinfoService.findFileinfoByFileCode(fileCode);
//获取文件保存的真实路径
String filePath = downloadFileinfo.getFilePath();
inputStream = new FileInputStream(filePath);
//解决下载时中文名称乱问问题
fileName = new String(downloadFileinfo.getFileName().getBytes("UTF-8"),"iso-8859-1");
return "download";
} @Override
public void setSession(Map<String, Object> arg0) {
this.session=arg0;
} @Override
public void setServletRequest(HttpServletRequest arg0) {
this.request=arg0;
}
}

  

  UserinfoAction:

package cn.zzsxt.udisk.action;

import java.util.Map;

import javax.servlet.ServletContext;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.SessionAware; import com.opensymphony.xwork2.ActionSupport; import cn.zzsxt.udisk.model.Userinfo;
import cn.zzsxt.udisk.service.IUserinfoService;
import cn.zzsxt.udisk.service.impl.UserinfoServiceImpl; public class UserinfoAction extends ActionSupport implements SessionAware{
private Userinfo user;
private IUserinfoService uesrinfoService = new UserinfoServiceImpl();
private Map<String,Object> session;
public Userinfo getUser() {
return user;
} public void setUser(Userinfo user) {
this.user = user;
}
/**
* 注册
* @return
* @throws Exception
*/
public String doRegister() throws Exception {
//获取服务器的upload目录
ServletContext servletContext = ServletActionContext.getServletContext();
String path = servletContext.getRealPath("/upload");
int count = uesrinfoService.doRegister(user,path);
if(count>0){
return this.SUCCESS;
}
return this.ERROR;
} public String doLogin() throws Exception {
Userinfo loginUser = uesrinfoService.doLogin(user);
if(loginUser!=null){
//将用户信息保持到session中
session.put("loginUser", loginUser);
return "list";
}
return this.LOGIN;
} @Override
public void setSession(Map<String, Object> arg0) {
this.session=arg0;
}
}

  

  FileinfoServiceImpl:

package cn.zzsxt.udisk.service.impl;

import java.io.File;
import java.util.List; import org.apache.commons.io.FileUtils; import cn.zzsxt.udisk.commons.MD5Utils;
import cn.zzsxt.udisk.dao.IFileinfoDao;
import cn.zzsxt.udisk.dao.impl.FileinfoDaoImpl;
import cn.zzsxt.udisk.model.Fileinfo;
import cn.zzsxt.udisk.model.Userinfo;
import cn.zzsxt.udisk.service.IFileinfoService; public class FileinfoServiceImpl implements IFileinfoService {
private IFileinfoDao fileinfoDao = new FileinfoDaoImpl();
@Override
public List<Fileinfo> findFileinfoByUserId(int userId) {
return fileinfoDao.findFileinfoByUserId(userId);
}
/**
* 上传文件
* 1.将文件上传到服务器端
* 2.将文件信息添加到数据库中
*/
@Override
public int uploadFile(Fileinfo[] file, Userinfo user,String path,File[] upload) throws Exception{
//将文件信息上次到服务器端
long totalSize=0,freeSize=32*1024*1024,usedSize=0; //此处freeSize初始化设置值,因为第一次进来listFiles()方法一直返回为空,fressSize一直为0,
//普通用户空间总大小为32M,VIP用户空间总大小128M      最下面判断剩余空间和文件大小,就一直抛异常。 并且要给listFiles()方法后面的循环遍历加一个
if(user.getUserType()==1){//普通用户            判断是否为空,如果为空执行的话会错误。 服务器每关闭一次,所有数据清空一次,所以没有那个路径,
totalSize = 32*1024*1024;//总字节数           导致第一次进来listFiles()返回为空
}else if(user.getUserType()==2){//VIP用户
totalSize = 128*1024*1024;
}
String userDirStr = path+"upload\\"+user.getUserName();
File userDir = new File(userDirStr);//用户上传文件的文件夹
File[] fs = userDir.listFiles();//获取该目录下的所有文件
//统计该用户已用空间大小
     if(fs!=null){
   for (File f : fs) {
   usedSize+=f.length();
   }
   freeSize = totalSize-usedSize;//计算剩余空间大小
    }
//统计上传文件的总大小
long uploadTotalSize=0;
for(File uploadFile:upload){
long length = uploadFile.length();//上传单文件的大小
if(user.getUserType()==1&&length>1*1024*1024){//普通用户
throw new Exception("普通用户单文大小不能超过1M!");
}
if(user.getUserType()==2&&length>2*1024*1024){
throw new Exception("VIP用户单文大小不能超过2M!");
}
uploadTotalSize+=length;
}
//上传文件大于剩余空间,抛出异常
if(uploadTotalSize>freeSize){
throw new Exception("剩余空间不足!");
}
int count=0;
//上传文件
for(int i=0;i<upload.length;i++){
File uploadFile = upload[i];
Fileinfo f = file[i];
//将文件上传到服务器端
FileUtils.copyFile(uploadFile, new File(userDir,f.getFileName()));
//将文件信息添加到数据库中
//对真实路径进行加密
String fileCode = MD5Utils.createMD5(f.getFilePath());
f.setFileCode(fileCode);
count = fileinfoDao.addFileinfo(file[i]);
}
return count;
}
/**
* 移除文件:
* 1.从服务器端用户上传目录下移除文件
* 2.从数据库中删除文件信息
*/
@Override
public int removeFile(int fileId) {
//根据文件编号查询文件详情信息
Fileinfo fileinfo = fileinfoDao.findFileinfoById(fileId);
String filePath = fileinfo.getFilePath();//获取文件保存的真实路径
File file = new File(filePath);
if(file.exists()){
file.delete();//删除文件
}
//从数据库中删除文件信息
return fileinfoDao.deleteFileinfo(fileId);
}
@Override
public Fileinfo findFileinfoByFileCode(String fileCode) {
return fileinfoDao.findFileinfoByFileCode(fileCode);
} }

  

   UserinfoServiceImpl:

package cn.zzsxt.udisk.service.impl;

import java.io.File;

import cn.zzsxt.udisk.commons.MD5Utils;
import cn.zzsxt.udisk.dao.IUserinfoDao;
import cn.zzsxt.udisk.dao.impl.UserinfoDaoImpl;
import cn.zzsxt.udisk.model.Userinfo;
import cn.zzsxt.udisk.service.IUserinfoService; public class UserinfoServiceImpl implements IUserinfoService {
private IUserinfoDao userinfoDao = new UserinfoDaoImpl();
/**
* 注册需要对密码进行MD5密码
*/
@Override
public int doRegister(Userinfo user,String path) {
String oldPass = user.getUserPass();
//对用户输入的密码进行加密
String newPass = MD5Utils.createMD5(oldPass);
user.setUserPass(newPass);
//在服务器端创建一个与用户名相同的文件夹,用于保存该用户上次的文件
File uploadDir = new File(path+"/"+user.getUserName());
if(!uploadDir.exists())
uploadDir.mkdirs();
return userinfoDao.addUser(user);
} /**
* 登陆
*/
@Override
public Userinfo doLogin(Userinfo user) {
//对用户输入的密码进行加密
String oldPass = user.getUserPass();
//对用户输入的密码进行加密
String newPass = MD5Utils.createMD5(oldPass);
user.setUserPass(newPass);
return userinfoDao.doLogin(user);
} }

  

  

  

java:struts框架(网路静态U盘项目)的更多相关文章

  1. Java - Struts框架教程 Hibernate框架教程 Spring框架入门教程(新版) sping mvc spring boot spring cloud Mybatis

    https://www.zhihu.com/question/21142149 http://how2j.cn/k/hibernate/hibernate-tutorial/31.html?tid=6 ...

  2. Java日志框架那些事儿

    文章首发于[博客园-陈树义],点击跳转到原文Java日志框架那些事儿. 在项目开发过程中,我们可以通过 debug 查找问题.而在线上环境我们查找问题只能通过打印日志的方式查找问题.因此对于一个项目而 ...

  3. javaWeb项目(SSH框架+AJAX+百度地图API+Oracle数据库+MyEclipse+Tomcat)之一 基础Struts框架搭建篇

    即将开始着手写这个项目,所以希望通过这篇博客来记录自己学习的过程 今天开学第一天,就上了软件工程实践课,自己也开始着手做这个大作业了.首先我的项目名称叫做智能班车管理系统. 项目的概况: 该软件产品是 ...

  4. java三大框架——Struts + Hibernate + Spring

    Struts主要负责表示层的显示 Spring利用它的IOC和AOP来处理控制业务(负责对数据库的操作) Hibernate主要是数据持久化到数据库 再用jsp的servlet做网页开发的时候有个 w ...

  5. Java后端框架之Spring Boot详解,文末有Java分布式实战项目视频可取

    在 Java 后端框架繁荣的今天,Spring 框架无疑是最最火热,也是必不可少的开源框架,更是稳坐 Java 后端框架的龙头老大. 用过 Spring 框架的都知道 Spring 能流行是因为它的两 ...

  6. Taurus.MVC 微服务框架 入门开发教程:项目集成:3、客户端:其它编程语言项目集成:Java集成应用中心。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...

  7. Struts框架——(三)动态ActionForm

    一.DynaActionForm的引入意义 使用ActionForm把表单数据单独封装起来,而且提供了自动的数据验证,简化了代码的编写,给我们带来了极大的方便. 但是,ActionForm也存在一些明 ...

  8. 读《架构探险——从零开始写Java Web框架》

    内容提要 <架构探险--从零开始写Java Web框架>首先从一个简单的 Web 应用开始,让读者学会如何使用 IDEA.Maven.Git 等开发工具搭建 Java Web 应用:接着通 ...

  9. [转]JAVA三大框架SSH和MVC

    Java—SSH(MVC) JAVA三大框架的各自作用  hibernate是底层基于jdbc的orm(对象关系映射)持久化框架,即:表与类的映射,字段与属性的映射,记录与对象的映射 数据库模型 也就 ...

随机推荐

  1. parfile解决exp时tables过多问题

    parfile 一般用于表数据过大.使用导出.导入命令参数过多等场景: 在对oracle数据库使用exp命令导出数据时,如果tables=后面跟的表比较多,就是导致命令行放不下,从而不能导出.百度一把 ...

  2. ArrayMatched

    import os from jinja2 import Environment,FileSystemLoader def generateNewLackArray(ArrayList,count,T ...

  3. selenium-Xpath使用方法

    01:什么是Xpath Xpath是一门xml文档中查找信息的语言,Xpath可用来在xml文档中对元素和属性进行遍历,主流的浏览器都支持xpath,因为HTML页面在DOM中表示xhtml文档 xp ...

  4. php面向对象相关技术

    step1 一个经典类的设计和实例化 <?php class mycoach { public $_name=''; public $_age=''; public $_expert=array ...

  5. WSL中使用npm install报错

    报错内容类似下面的格式.具体解决方法请看这里:https://github.com/Microsoft/WSL/issues/14 着重关注 https://github.com/Microsoft/ ...

  6. JAVA笔记7-Object类之toString方法和equals方法

    位于rt.jar\java\lang\Object.class Object类是所有Java类的根基类(Java中只有一个根基类,C++中有多个).如果在类声明中未使用extends关键字指明其基类, ...

  7. Vue中如何使用axios请求跨域数据

    1.axios不支持jsonp,因为axios的作者觉得jsonp不太友好,推荐用CORS方式更为干净: 2.在使用axios发送请求时,服务器端设置 res.header("Access- ...

  8. Spring前台填充数据

    举例: <div>${userinfo.name}</div>   显示规则 1.先判断对象有没有存在,对象存在的时候,才会查找对象里的字段.这个时候字段必须正确.2.如果对象 ...

  9. CodeForces 349B--Color the Fence(贪心)

    B. Color the Fence time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  10. microsoft office 2010 visio激活

    office2010 tookit这款绿色的软件进行Visio2010激活 http://jingyan.baidu.com/article/4f34706ecae169e387b56dd1.html