以下代码如果没有耐心千万不要看,很费时的,自己觉得这个实现方式实在是太不给力了。
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实现多文件上传struts1.x实现多文件上传struts1.x实现多文件上传struts1.x实现多文件上传struts1.x实现多文件上传struts1.x实现多文件上传
Struts1.x常用的开发包,需要学习struts1.x朋友可以下载
struts1.x和struts2.x区别
Struts1.x的上传文件示例。Struts1.x的教程参考我的Blog:http://blog.csdn.net/boyazuo
freemarker与struts 1.x 结合,生成html 在http://blog.csdn.net/chen1255 的web中有详细描述关于freemarker与struts1.x的结合
Struts 2.x权威指南(第3版)
Struts1.x的登录示例,Struts1.x相关详细教程参考我的Blog:http://blog.csdn.net/boyazuo
在这里,通过一个小例子稍微总结了下struts1和struts2的区别,希望这个能帮助到初学struts的朋友
使用struts1.x实现单文件,多文件上传,以及下载实例
java Struts 1.x 框架 Web 开发 java Struts 1.x 框架 Web 开发
struts1.x apps 所有最新的Struts1.x项目应用 struts1.x apps 所有最新的Struts1.x项目应用 欢迎大家下载。。。
学习魔乐科技Struts2.x视频框架的学习笔记,在这里给各位参考一下,要mldn其他框架笔记的请关注我,后续会推出
struts1.x入门教程
struts1 国际化 源代码 struts1 国际化 工程
适用于Struts1.x初学者(网摘共25节)
struts2.x所有包及配置文件
基于Struts1.x的简单电子商务系统,hiberntae实现数据的持久化,数据库是Mysql
这是struts1.x标签! struts1.x是历经考验的成熟的框架! 此标签可以帮助你更好的学习struts1.x的标签!
Struts1.x实现防止提交的Token使用示例。工程环境:MyEclipse