以下代码如果没有耐心千万不要看,很费时的,自己觉得这个实现方式实在是太不给力了。
1.前台表单:
<script type="text/javascript">
var t = 1;
function addFileInput()
{
var parent = document.getElementById("more");
var br = document.createElement("br");
var input = document.createElement("input");
var button = document.createElement("input");
input.type = "file";
input.name = "uploadFile[" + (t++) + "].file";
input.size = "30";
button.type = "button";
button.value = "删除";
button.onclick = function()
{
parent.removeChild(br);
parent.removeChild(input);
parent.removeChild(button);
};
parent.appendChild(br);
parent.appendChild(input);
parent.appendChild(button);
}
</script>
<td id="more"><!--
<html:file property="uploadFile[0].file" /><br/>
<html:file property="uploadFile[1].file" /><br/>
<html:file property="uploadFile[2].file" />
-->
<input type="file" name="uploadFile[0].file" size="30">
<input type="button" onclick="addFileInput();" value="增加">
</td>
2. FileAction.java
/**
* 文件上传实现1.0
*/
public ActionForward addFile(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response){
FileForm fileForm = (FileForm)form;
List<UploadFile> uploadFiles = fileForm.getFormFiles();
// result = 0;
if(uploadFiles != null){
String root=request.getSession(true).getServletContext().getRealPath("/heyjdemo/upfiles/");
FileUploadTool fileUploadTool = new FileUploadTool();
fileUploadTool.saveFile(uploadFiles, root);
/*
*将文件信息保存到数据
*/
}
return mapping.findForward("success");
}
3. FileUploadTool.java
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.struts.upload.FormFile;
/**
* <p> 描述: 文件上传工具类,每次上传的文件都上传到时upifles目录中,根据年月别保存到
* 相应的目录下,如当年月为2011-3 则文件相应的路径为:/upfiles/2010_3/
* </p>
*
* <p> 原则:
*
* 如果是单文件上传,用户界面文件表单为:<html:file property="formFile" />
* 如果是多文件上传,用户界面文件表单为如下格式,其中uploadFile数组大小可以任意,建议不要太大:
* <html:file property="uploadFile[0].file" /><br/>
<html:file property="uploadFile[1].file" /><br/>
<html:file property="uploadFile[2].file" />
* </p>
*
* <p> 作用: 1.文件名,文件路径,文件大小,文件类型,将文件保存到磁盘(支持多文件上传)
* 2.删除磁盘中的文件
* 3.垃圾文件(夹)清理 未实现*************************
* 4.断点续传未实,现期待给力哥***********************
*
* </p>
*
* <p> Create Date:2011-3-14 </p>
*
*/
public class FileUploadTool {
/**
* 保存单个文件后所得到的信息
*/
private String fname = "";
private String furl = "";
private String ftype = "";
private float fsize = 0;
/**
* 保存多个 文件后所得到的信息
*/
private List<String> fnames;
private List<String> furls;
private List<String> ftypes;
private List<Float> fsizes;
public String getFname() {
return fname;
}
public String getFurl() {
return furl;
}
public String getFtype() {
return ftype;
}
public float getFsize() {
return fsize;
}
public List<String> getFnames() {
return fnames;
}
public List<String> getFurls() {
return furls;
}
public List<String> getFtypes() {
return ftypes;
}
public List<Float> getFsizes() {
return fsizes;
}
/**
* 获得唯一的字符串前缀
* 使用日期+随机数
* @return
*/
public String getUniqueString(){
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String currrentDateStr = simpleDateFormat.format(date);
int randInt = (int)( Math.random()*10000);
String uniqueStr = (currrentDateStr + randInt).replaceAll(" ", "")
.replaceAll(":", "").replaceAll("-", "");
return uniqueStr;
}
/**
* 保存单个文件,
* 当返回为1时,保存文件成功,当返回为0时,保存不成功
* @param file
* @param preFurl
* @param preFname
* @return
*/
public int saveFile(FormFile file, String root, String preFname){
//保存文件
try{
fsize = file.getFileSize();
/**
* 当文件大小为0时不上传此文件
*/
if(0 == fsize){
return 0;
}
String[] tempStr = preFname.split("\\.");
if(tempStr.length>0){
ftype = tempStr[tempStr.length - 1 ];
}
fname = getUniqueString();
furl = root + "\\" + fname;
if(!"".equals(ftype)){
furl += "." + ftype;
}
InputStream in = file.getInputStream();
System.out.println(furl);
OutputStream out = new FileOutputStream(furl);
int read = 0;
//fsize = 0;
byte[] buffer = new byte[1024];
while((read = in.read(buffer,0,1024)) != -1){
out.write(buffer, 0, read);
// fsize += read;
}
in.close();
out.close();
}catch(Exception e){
e.printStackTrace();
return 0;
}
///fsize /= 1024;//转换成kb
return 1;
}
/**
* 保存多个文件
* 利用保存单个文件的功能模块来实现多文件保存
* @param files
* @param url
*/
public void saveFile(List<UploadFile> files, String root){
/*
* 初始化
*/
fnames = new ArrayList<String>();
furls = new ArrayList<String>();
ftypes = new ArrayList<String>();
fsizes = new ArrayList<Float>();
/*
* 保存文件
*/
for(UploadFile file : files){
FormFile formFile = file.getFile();
if(formFile == null){
continue;
}
saveFile(formFile,root,formFile.getFileName());
fnames.add(fname);
furls.add(furl);
ftypes.add(ftype);
fsizes.add(fsize);
}
}
/**
* 删除单个文件
* @param furl
*/
public boolean deleteFile(String furl){
java.io.File file = new java.io.File(furl);
if(file.exists()){
file.delete();
return true;
}else{
return false;
}
}
/**
* 删除多个文件
* @param furls
*/
public List<Boolean> deleteFile(List<String> furls){
List<Boolean> results = new ArrayList<Boolean>();
for(String furl : furls){
results.add(deleteFile(furl));
}
return results;
}
public void cleanRubbishFiles(){
}
}
4. FileForm.java
/**
* <p> 描述: 文件DAO</p>
*
* <p> 原则:
* 如果是单文件上传,用户界面文件表单为:<html:file property="formFile" />
* 如果是多文件上传,用户界面文件表单为如下格式,其中uploadFile数组大小可以任意,建议不要太大:
* <html:file property="uploadFile[0].file" /><br/>
<html:file property="uploadFile[1].file" /><br/>
<html:file property="uploadFile[2].file" />
* </p>
*
* <p> 作用: </p>
*
* <p> Create Date:2011-3-14 </p>
*
*/
public class FileForm extends ActionForm {
private File file = new File();
private List<File> files;
private Page page = new Page(1,3);
/**
* Struts文件表单域
*/
private FormFile formFile;
/**
* 多个文件
* @return
*/
private List<UploadFile> formFiles = new ArrayList<UploadFile>();
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public List<File> getFiles() {
return files;
}
public void setFiles(List<File> files) {
this.files = files;
}
public Page getPage() {
return page;
}
public void setPage(Page page) {
this.page = page;
}
public FormFile getFormFile() {
return formFile;
}
public void setFormFile(FormFile formFile) {
this.formFile = formFile;
}
public List<UploadFile> getFormFiles() {
return formFiles;
}
public void setFormFiles(List<UploadFile> formFiles) {
this.formFiles = formFiles;
}
public FileForm(){
}
/**
* 注意这个方法的定义 不加中间的循环是会出错的,
* struts1多文件上传时,是数组 ----》list的过程,不能类型转换
* @param index
* @return
*/
public UploadFile getUploadFile(int index) {
int size = formFiles.size();
if (index > size - 1) {
for (int i = 0; i < index - size + 1; i++) {
formFiles.add(new UploadFile());
}
}
return (UploadFile) formFiles.get(index);
}
}
5.UploadFile.java
import java.io.Serializable;
import org.apache.struts.upload.FormFile;
/**
* <p> 描述: struts1文件上传时的formfile </p>
*
* <p> 原则: </p>
*
* <p> 作用: </p>
*
* <p> Create Date:2011-3-15 </p>
*
*/
public class UploadFile implements Serializable {
private FormFile file;
public FormFile getFile() {
return file;
}
public void setFile(FormFile file) {
this.file = file;
}
}
分享到:
相关推荐
Struts1.x与Struts2.x是两种非常流行的Java Web应用程序框架,它们都由Apache软件基金会开发,旨在简化MVC(Model-View-Controller)架构的实现。然而,两者在设计哲学、功能特性以及实现方式上存在显著差异。以下是...
6. **国际化与本地化**:Struts1.x支持多语言环境,通过Resource Bundle管理和message.properties文件实现动态加载不同语言的文本资源,提供本地化服务。 7. **Tiles框架**:Tiles是Struts1.x的一个插件,用于构建...
Struts1.x提供了处理多文件上传的功能,使得开发者可以方便地集成到自己的应用程序中。 在Struts1.x中实现多文件上传,主要涉及以下几个核心概念和步骤: 1. **表单设计**:首先,你需要创建一个HTML表单,包含`...
综上所述,Struts2.x相对于Struts1.x在多个方面进行了改进和优化,包括但不限于Action的实现方式、工作流程、数据绑定、视图技术以及验证机制,这些改进共同构成了Struts2.x相较于Struts1.x的优势,使其成为现代Web...
- **第一个程序**:创建一个简单的 Struts1.x 项目,包含基本的 JSP 页面、Action 类和配置文件,实现用户提交表单数据的功能。 - **示例步骤**: 1. 创建一个新的 Web 项目。 2. 配置 Struts1.x 的依赖库。 3. ...
**Struts2.x与Struts1.x对比**:相较于Struts1.x,Struts2.x具有更多的优势,如不再强制要求ActionForm,配置文件更简洁,处理流程更加清晰。具体而言,请求首先被过滤器捕获,然后根据`struts.xml`文件的配置调用...
8. **国际化与本地化**:Struts1.x支持多语言,通过资源包(properties文件)来实现。你可以为不同的语言创建不同的资源配置文件,Struts会根据用户的浏览器设置自动选择。 9. **异常处理**:Struts1.x提供了异常...
在Struts1.x中,实现文件上传功能是一个常见的需求,特别是在处理用户提交的表单时需要包含多个文件。下面我们将详细介绍如何使用Struts1.x来实现多个文件的上传。 首先,我们需要在HTML表单中添加`...
在Struts1.x中,实现文件上传功能是一个常见的需求,这通常涉及到处理用户通过表单提交的二进制数据,如图片、文档等。本示例将深入探讨如何在Struts1.x中实现文件上传功能。 首先,你需要在Struts的配置文件...
7. **国际化和本地化**:Struts 1.x 支持多语言和文化环境,通过Resource Bundles管理不同地区的文本资源,方便实现国际化。 8. **异常处理**:通过配置全局异常处理,Struts 1.x 可以捕获并处理应用程序中抛出的...
在Struts1.x中,实现I18N(Internationalization)主要是通过资源文件(如*.properties)来管理不同语言的文本。这些文件按照语言和地区进行组织,例如,`message_en.properties`用于英文,`message_zh_...
然而,需要注意的是,Struts1.x已经较为过时,现代的Web开发更多地转向了Spring MVC、Play Framework或AngularJS等更现代的解决方案。尽管如此,理解Struts1.x可以帮助我们了解Web框架的发展历程,以及MVC模式在实际...
- 首先,你需要下载Struts1.x的库文件,如struts-1.3.10-all.zip,并将其解压缩。 - 在解压后的lib目录中,你可以找到所有必需的jar文件,包括Struts框架的实现和其他依赖。 - 创建一个新的Web项目,例如myStruts...
1. **安装和配置**:了解如何在项目中集成Struts1.x框架,配置web.xml和struts-config.xml文件。 2. **Action和ActionForm**:深入理解这两者的作用,如何编写和使用它们。 3. **视图渲染**:熟悉JSP页面和Struts...
freemarker与struts 1.x 结合,生成html 在http://blog.csdn.net/chen1255 的web中有详细描述关于freemarker与struts1.x的结合
这个网上书店示例对于学习和理解Struts1.x框架的MVC工作原理,以及如何整合jQuery和Ajax以实现动态交互是非常有价值的。尽管代码可能未完全改造,但它提供了一个实际的起点,让学生或开发者能够进一步实践和优化。
Struts1.x是一个经典的Java Web框架,用于构建MVC(模型-视图-控制器)架构的应用程序。在国际化(i18n)方面,Struts1提供了强大的支持,使得应用程序可以适应不同语言和地区的用户需求。以下是关于Struts1.x国际化...
在Struts 1.x中,如果需要在表单中处理文件上传,这个库是必不可少的。 搭建Struts 1.x环境的步骤通常包括以下几点: 1. 将这些jar包添加到你的项目类路径中。 2. 创建`struts-config.xml`配置文件,定义Action、...
**二、Struts1.x多文件上传** 多文件上传与单文件上传类似,只需在JSP页面中添加多个`<html:file>`标签,每个标签对应一个文件。在ActionForm中,需要为每个文件字段添加相应的属性。 **三、Struts1.x文件下载** ...