【Struts2】☆★之文件上传,下载,重传,预览

今日群里一兄弟问我能否给一份struts文件上传下载的例子,因为自己项目比较紧所以想在网上找

些源码给他,但是纵观全网,写的都不是太全,这让新手使用都不是太方便,利用周天花了30分钟写了

一个。发布出来,发布出来大家共同学习!其中包括数据库的设计,路径存储,重现上传删除服务器源

文件,图片预览,等!

知识你我共同分享!

首先明白文件上传下载的原理。

①、利用输入流个输出流InputStream OutputStream

②、我们的Struts自带的FileUtiles.copyFile上传组件的!

本文采用的事第二种!另为了方便读者可以直接的使用本源码,采取的事多文件上传。一劳永逸!另由于时间关系,采用存储方式是JDBC和Mysql

第一步:我们需要相关的开发架包:

如果这几个的意思您不懂可以直接百度。也可以给我留言!

第二步:建立我的数据库表结构

第三步:编写我们的DBUtil

package org.usc.util;

import java.sql.*;

public class DBUtil {

public static Connection conn = null;

public static Connection getConn() {

try {

Class.forName("com.mysql.jdbc.Driver");

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

try {

conn = DriverManager.getConnection(

"jdbc:mysql://localhost:3306/oracle", "root", "root");

} catch (SQLException e) {

e.printStackTrace();

}

return conn;

}

public static void close() {

if (conn != null) {

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

public static void main(String[] args) {

getConn();

System.out.println(getConn());

}

}

第四步:编写实体类package org.usc.entity;

/**

* 文件类,需要的时候,可以和数据库进行关联

*

*/

public class UploadFiles

{

private String uploadFileName;//上传的文件名称

private String uploadContentType;//类型

private String uploadRealName;//服务器保存的文件真实名称,UUID

private String txt;

private String path;

//如果使用数据库的话,建议这三个字段都进行保存

public String getUploadFileName()

{

return uploadFileName;

}

public void setUploadFileName(String uploadFileName)

{

this.uploadFileName = uploadFileName;

}

public String getUploadContentType()

{

return uploadContentType;

}

public void setUploadContentType(String uploadContentType)

{

this.uploadContentType = uploadContentType;

}

public String getUploadRealName()

{

return uploadRealName;

}

public void setUploadRealName(String uploadRealName)

{

this.uploadRealName = uploadRealName;

}

public String getTxt() {

return txt;

}

public void setTxt(String txt) {

this.txt = txt;

}

public String getPath() {

return path;

}

public void setPath(String path) {

this.path = path;

}

}

第五步:编写相关Dao方法package org.usc.dao;

import java.sql.*;

import org.usc.entity.UploadFiles;

import org.usc.util.DBUtil;

public class Dao {

public boolean add(UploadFiles uploadFiles ){

boolean result=false;

Connection conn=DBUtil.getConn();

try {

PreparedStatement ps=conn.prepareStatement("insert into UploadFiles(uploadFileName,uploadRealName,uploadContentType,txt,path)values(?,?,?,?,?)");

ps.setString(1, uploadFiles.getUploadFileName());

ps.setString(2, uploadFiles.getUploadRealName());

ps.setString(3, uploadFiles.getUploadContentType());

ps.setString(4, uploadFiles.getTxt());

ps.setString(5, uploadFiles.getPath());

ps.execute();

result=true;

} catch (SQLException e) {

e.printStackTrace();

}finally{

DBUtil.close();

}

return result;

}

// 根据ID的编号查询

public UploadFiles querykById(int id) {

Connection conn = DBUtil.getConn();

UploadFiles uploadFiles = new UploadFiles();

try {

PreparedStatement ps = conn

.prepareStatement("select*from UploadFiles where id = ?");

ps.setInt(1, id);

ResultSet rs = ps.executeQuery();

if (rs.next()) {

uploadFiles.setPath(rs.getString("path"));

uploadFiles.setTxt(rs.getString("txt"));

uploadFiles.setUploadFileName(rs.getString("uploadFileName"));

uploadFiles.setUploadRealName(rs.getString("uploadRealName"));

uploadFiles.setUploadContentType(rs.getString("uploadContentType"));

}

} catch (SQLException e) {

e.printStackTrace();

}

return uploadFiles;

}

}

第六步:编写上传Actionpackage org.usc.action;

import java.io.File;

import java.util.*;

import org.apache.commons.io.FileUtils;

import org.apache.struts2.ServletActionContext;

import org.usc.dao.Dao;

import org.usc.entity.UploadFiles;

import com.opensymphony.xwork2.ActionSupport;

public class UploadAction extends ActionSupport {

/**

*

*/

private static final long serialVersionUID = 1L;

private File[] upload;// 实际上传文件

private String[] uploadContentType; // 文件的内容类型

private String[] uploadFileName; // 上传文件名

// 注意FileName和ContentType 必须这样写!以你的

private List uploadFiles = new ArrayList();// 上传文件集合

private String message;

public static String FILE_ROOT = "";

public static String UPLOAD_PATH = "/upload"; // 上传文件路径

public String execute() throws Exception {

try {

String path = ServletActionContext.getServletContext().getRealPath(

FILE_ROOT);

String path2 = UPLOAD_PATH + "/shangchuan/";

String targetDirectory = path + path2;

File file = new File(targetDirectory);// 获取文件流路径

if (!file.exists()) {

file.mkdirs();

}

for (int i = 0; i

String fileName = uploadFileName[i];// 上传的文件名

String type = uploadContentType[i];// 文件类型

String realName = UUID.randomUUID().toString()

+ getExt(fileName);// 保存的文件名称,使用UUID+后缀进行保存

File target = new File(targetDirectory, realName);

FileUtils.copyFile(upload[i], target);// 上传至服务器的目录,一般都这样操作,

/*

* UploadFiles uf = new UploadFiles();// 创建文件

* uf.setUploadContentType(type);

* uf.setUploadFileName(fileName);//上传的文件名称

* uf.setUploadRealName(realName);//保存数据库的文件名称 采用加密形式

* uploadFiles.add(uf);// 添加到需要下载文件的List集合中

*/// uploadRealName[i]=UUID.randomUUID().toString();

// System.out.println("uploadRealName:"+uploadRealName[i]);

/*

* for(File file:upload){

* System.out.println("filename:"+file.getName()); }

*/

System.out.println("filename真实的名字:" + fileName);

System.out.println("保存数据库中的加密名字" + realName);

System.out.println("Ext-后缀名:" + getExt(fileName));

System.out.println("Type-类型:" + type);

System.out.println("上传路径:" + path2 + realName);

System.out.println("----------------------------");

// 下面我们将相关的信息保存到数据库中去

UploadFiles uploadFiles = new UploadFiles();

uploadFiles.setPath(path2 + realName);

uploadFiles.setTxt(getExt(fileName));

uploadFiles.setUploadContentType(type);

uploadFiles.setUploadFileName(fileName);

uploadFiles.setUploadRealName(realName);

Dao dao = new Dao();

dao.add(uploadFiles);

}

// 通过dao方法根据ID值查出所对应对象的属性,在页面显示出来

Dao dao = new Dao();

UploadFiles ed = dao.querykById(109);// 这是我测试用的id值 您的Id初始值应该为1

uploadFiles.add(ed);

System.out

.println(uploadFiles.get(0).getUploadFileName() + ">>>>>");

} catch (Exception e) {

e.printStackTrace();

addActionError(e.getMessage());

}

return SUCCESS;

}

// 本方法是截取后缀名的 不会的话百度搜索IndexOf方法

public static String getExt(String fileName) {

return fileName.substring(fileName.lastIndexOf("."));

}

//下面是get set方法

public File[] getUpload() {

return upload;

}

public void setUpload(File[] upload) {

this.upload = upload;

}

public String[] getUploadContentType() {

return uploadContentType;

}

public void setUploadContentType(String[] uploadContentType) {

this.uploadContentType = uploadContentType;

}

public String[] getUploadFileName() {

return uploadFileName;

}

public void setUploadFileName(String[] uploadFileName) {

this.uploadFileName = uploadFileName;

}

public List getUploadFiles() {

return uploadFiles;

}

public void setUploadFiles(List uploadFiles) {

this.uploadFiles = uploadFiles;

}

public String getMessage() {

return message;

}

public void setMessage(String message) {

this.message = message;

}

}

第七步:编写下载Actionpackage org.usc.action;

import java.io.*;

import com.opensymphony.xwork2.ActionSupport;

import org.apache.struts2.ServletActionContext;

public class DownloadAction extends ActionSupport {

private static final long serialVersionUID = 6329383258366253255L;

private String fileName;

private String fileRealName;

public String path;

public static String FILE_ROOT = "";

public void setFileName() {

// 得到请求下载的文件名

String fname = ServletActionContext.getRequest().getParameter("name");

String frealname = ServletActionContext.getRequest().getParameter(

"realname");

try {

/*

* 对fname参数进行UTF-8解码,注意:实际进行UTF-8解码时会使用本地编码,本机为GBK。

* 这里使用request.setCharacterEncoding解码无效.

* 只有解码了getDownloadFile()方法才能在下载目录下正确找到请求的文件

*/

fname = new String(fname.getBytes("ISO-8859-1"), "UTF-8");

frealname = new String(frealname.getBytes("ISO-8859-1"), "UTF-8");

} catch (Exception e) {

e.printStackTrace();

}

this.fileName = fname;

this.fileRealName = frealname;

// System.out.println(fileName);

// System.out.println(fileRealName);

}

/*

* @getFileName 此方法对应的是struts.xml文件中的:

* name="contentDisposition">p_w_upload;filename="${fileName}"

* 这个属性设置的是下载工具下载文件时显示的文件名, 要想正确的显示中文文件名,我们需要对fileName再次编码

* 否则中文名文件将出现乱码,或无法下载的情况

*/

public String getFileName() throws UnsupportedEncodingException {

fileRealName = new String(fileRealName.getBytes(), "ISO-8859-1");

return fileRealName;

}

/*

* @getDownloadFile 此方法对应的是struts.xml文件中的:

* name="inputName">downloadFile 返回下载文件的流,可以参看struts2的源码

*/

public InputStream getDownloadFile() {

this.setFileName();

String uploadPath = ServletActionContext.getRequest().getParameter(

"path");

String path3 = ServletActionContext.getServletContext().getRealPath(

FILE_ROOT);

String path = uploadPath;

String path1 = (path3 + path);

File file = new File(path1);

InputStream file1 = null;

try {

file1 = new FileInputStream(file);

} catch (FileNotFoundException e) {

e.printStackTrace();

}

return file1;

}

@Override

public String execute() throws Exception {

return SUCCESS;

}

}

第八步:配置struts.xml和web.xml

struts PUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

"http://struts.apache.org/dtds/struts-2.0.dtd">

/upload.jsp

/upload.jsp

/download.jsp

2097152

p_w_upload;filename="${fileName}"

downloadFile

xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

upload.jsp

struts2

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

struts2

/*

第九步:编写上传jsp

upload

function addMore()

{

var td = document.getElementById("more");

var br = document.createElement("br");

var input = document.createElement("input");

var button = document.createElement("input");

input.type = "file";

input.name = "upload";

button.type = "button";

button.value = "   删除    ";

button.onclick = function()

{

td.removeChild(this);

}

td.appendChild(br);

td.appendChild(input);

td.appendChild(button);

}

enctype="multipart/form-data">

上传文件

第十步:编写下载jsp

download

文件下载

${uploadFiles.uploadFileName }

访问路径:http://127.0.0.1:8080/update/upload.jsp

第十一步:测试页面

第十二步:下载页面

本项目兼容SSH框架的项目稍加修改,即可使用!如有问题请到QQ群:160243674去找我!

项目结构

×××地址:

struts上传word和excel文件到oracle,Struts文件上传,下载,重传,预览相关推荐

  1. pdf文件如何在安卓手机端不用下载在线预览

    由于H5手机端页面,苹果ios手机端支持在线预览,而安卓手机端不行. 解决方案: 使用pdf.js插件. 官网地址:https://mozilla.github.io/pdf.js/ 第一步:下载整个 ...

  2. 文件上传,下载,预览,删除(File),分页接口

    文件上传,下载,预览,删除(File) 1.公共参数方法 1.1公共返回类型定义 1.2 分页接口 1.3公共实体类 1.4 公共的 mapper.java/xml(都放在一起) 1.4.1 File ...

  3. iOS 打破沙盒限制 处理其他App的Office等文件(上传、下载、预览)

    前言 项目要加个附件功能,要求发布者能添加word.pdf什么的,查看者能下载并预览. 安卓端表示OK无问题.iOS端表示w*%#-c.由于沙盒机制,没越狱的iPhone不同App文件都是不互通的. ...

  4. 市委组织部项目--word上传,下载,预览,删除

    需求:市委组织部考核项目,既然是考核项目就会有很多考核标准要求等,而且各个下属单位对于被考核指标的结果需要上传.这些过程都是通过文档实现的.也就是需要word文档的上传,下载,预览等功能. Word上 ...

  5. java对word、Excel、PPT、PDF文件加密

    java对word.Excel.PPT.PDF文件加密 所需依赖:Spire.Office.jar 说明:该解决方案使用spire.office(免费版)该版本有使用限制谨慎使用对于小文件来说足够了 ...

  6. SpringBoot+MongoDB GridFS文件上传、下载、预览实战

    SpringBoot + MongoDB GridFS 随着web 3.0的兴起,数据的形式不局限于文字,还有语音.视频.图片等.高效存储与检索二进制数据也成为web 3.0必须要考虑的问题.然而这种 ...

  7. 【Vue实用功能】Vue实现文档在线预览功能,在线预览PDF、Word、Excel、ppt等office文件

    文章目录 @[TOC](文章目录) 方法一. Luckysheet 预览 方法二. Office Web 查看器(微软的开发接口) 方法三. XDOC文档预览云服务(预览pdf.word.xls.pp ...

  8. Google word、excel、ppt (Chrome)浏览器插件下载

    Google word.excel.ppt (Chrome)浏览器插件下载 [插件简介] 使用Google文档.表格和幻灯片来查看和编辑Microsoft Word.Excel和PowerPoint文 ...

  9. 【微信小程序云开发】1分钟学会实现上传、下载、预览、删除图片,并且以九宫格展示图片

    大家好,我叫小秃僧 这篇文章是讲解云开发如何上传.下载.预览.删除图片,并且以九宫格展示图片的功能 学习目录 1. 实现效果 2.JavaScript代码 3.wxml代码 4.wxss代码 1. 实 ...

最新文章

  1. 基于投影仪的定位技术
  2. 由于找不到appvisvsubsystems32.dll_去固始张街逛一逛,以后可能看不到了......
  3. ado数据处理超时限制
  4. Android-DataBinding源码探究
  5. mysql sql字符串连接函数_Mysql字符串连接函数 CONCAT()与 CONCAT_WS()
  6. aop实现原理_SpringAOP原理分析
  7. mysql异机备份_RMAN异机恢复备份集权限问题
  8. linux命令cd回退_Linux命令一
  9. python关闭函数解释器_深入 Python 解释器源码,我终于搞明白了字符串驻留的原理!...
  10. anylogic和java,基于Anylogic的Java代码入门教程
  11. 传统蒙文字体_关于传统蒙古文网页的国际标准编码及字体处理技术
  12. JAVA语言基础——基本语法
  13. VIP视频会员,无限制看剧对人的自制力,产生了严重的考验和折磨
  14. d3dx9_43.dll如何修复?计算机中丢失d3dx9_43.dll的解决办法
  15. 等差数列前n项和公式证明
  16. VIN码识别-汽修行业新技术
  17. Linux Centos 7 实现java控制打印机打印文件**
  18. 【HTM】层级实时记忆脑皮质学习算法 一、当前进度
  19. 深入理解7种垃圾收集器
  20. 数据通信系统的基本模型

热门文章

  1. 深度学习实验总结:PR-曲线、线性回归、卷积神经网络、GAN生成式对抗神经网络
  2. 《数字图像处理(第三版)》 第二章 数字图像基础 笔记3(图像取样和量化)
  3. 小白初写Spring核心容器功能
  4. elasticsearch 实践
  5. 组织级项目管理成熟度模型 OPM3模型
  6. 石墨烯/PEDOT 水凝胶
  7. 数据嗨客 | 第1期
  8. pycharm安装pandas报错解决办法
  9. 四个架构设计案例及其思维方式
  10. 分享制作系统启动U盘的方法