最近做了一个附件上传下载删除的功能,特地把关键代码记录下来,方便以后复用,也分享给大家!
首先是JSP 代码:
<td class="tdHead33">附件上传:<br/><font color="red"><b>(提示:单个文件上传不得超过10M)</b></font></td>
<td id="accessoryFileTd">
<a onclick="addFile()">添加附件</a><br/>
<!-- 循环出已经上传的附件 -->
<s:iterator value="signFileList" id="file" status="st1">
<div id="accessoryDiv<s:property value="#st1.index"/>" style="padding:3px">
<a onclick="javascript:exportSingle('<s:property value="#file.FILE_URL"/>')" >
<s:property value='#file.FILE_NAME'/>
</a>
<a onclick="deleteFile('accessory','<s:property value="#file.FILE_URL"/>','<s:property value="#st1.index"/>')" class="Edit_Button" href="javaScript:void(0);">
删除
</a>
</div>
</s:iterator>
</td>
然后是JS代码:
文件上传成功后,保存到数据库中的FILE_URL文件路径是文件路径+文件名称+时间戳,删除和下载都是根据FILE_URL唯一确定的。
var fileNum=1;
// 增加附件上传控件
function addFile(){
var str="<div id=\"fileDiv"+fileNum+"\"> ";
str+="<input id=\"accessoryFile\" name=\"formBean.accessoryFile\" type=\"file\"/> ";
str+=" <a id=\"delete\" onclick=\"deleteFile("+fileNum+")\" style=\"text-decoration:underline\">删除</a>"
$("#accessoryFileTd").append(str);
fileNum++;
}
<pre name="code" class="html"> // 删除附件上传控件
function deleteFile(num){
$("#fileDiv"+num).html("");
}
function deleteFile(file,id,num){
mini.confirm("是否确认删除服务器上的文件?", "确定",
function (action) {
if (action == "ok") {
$.post(
bootPATH+"/ajax3/uploadFile_deleteFile.action",
{"appAttachmentId":id},
function (data, textStatus){
if (data.result=="success")
{
$("#accessoryDiv"+num).html("");
mini.alert("删除成功!");
}
else
{
mini.alert("操作失败!");
return;
}
}, "json");
}
}
);
}这是下载附件的JS ,其中appAttachmentId为附件路径function exportSingle(appAttachmentId){
var url = bootPATH+"/inner/uploadFile_downLoadFile.action?appAttachmentId="+appAttachmentId;
$("#actionForm").attr("action",url).submit();
}然后是JAVA代码:
要想将附件上传到服务器,首先得建立一个存放附件的文件夹:
public final static String FILE_PATH = "Upload";
private void uploadingFileInnerSignInfo(Map map) throws Exception {
String personId = map.get("personId").toString();
String pactId = map.get("pactId").toString();
if(""!=map.get("accessoryFileFileName") && null!=map.get("accessoryFileFileName") && ""!=map.get("accessoryFile") && null!=map.get("accessoryFile"))
{
String accessoryFileFileName = map.get("accessoryFileFileName").toString();
String accessoryFile = map.get("accessoryFile").toString();
String[] files = accessoryFile.split(",");
String[] fileNames = accessoryFileFileName.split(",");
for (int i = 0; i < files.length; i++)
{
FileParam param = new FileParam();
String fileUrl = CommonConstant.FILE_PATH + "/" + fileNames[i] + DateTool.getCurrrentDate2();
param.setPactId(pactId);
param.setFileName(fileNames[i]);
param.setCreatedBy(personId);
param.setLastUpdateBy(personId);
param.setCreationDate(DateTool.getCurrrentDate1());
param.setLastUpdatedDate(DateTool.getCurrrentDate1());
uploadingFile(files[i], CommonConstant.FILE_PATH, fileNames[i], param);
}
}
} /**
* 上传文件方法
* @return
*/
public boolean uploadingFile(String files, String folderName,
String paramFileName, FileParam fileParam) throws Exception
{
if (files == null || paramFileName == null)
{
return false;
}
String currentDateStr = DateTool.getCurrrentDate2();
String name = FileUtil.getFileName(paramFileName) + "_"
+ currentDateStr + "."
+ FileUtil.getExtentionName(paramFileName);
FileOutputStream fos = null;
FileInputStream fis = null;
try
{
String folderPath = this.getServerFilePath(folderName);
File folderFile = new File(folderPath);
if (!folderFile.exists())
{
folderFile.mkdir();
}
fis = new FileInputStream(files);
fos = new FileOutputStream(folderPath + "\\" + name);
byte[] buffer = new byte[102400];
int len = 0;
while ((len = fis.read(buffer)) > 0)
{
fos.write(buffer, 0, len);
}
fileParam.setFileUrl(folderName + "/" + name);
String sql = "INSERT INTO pact_baseinfo_inner_signfile (pact_id,file_name,file_url,creation_date,created_by,last_update_date,last_updated_by) " ;
sql += "values ('"+ fileParam.getPactId()+"','"+fileParam.getFileName()+"','"+fileParam.getFileUrl()+"',sysdate,'" +fileParam.getCreatedBy()+"',sysdate,'"+fileParam.getLastUpdateBy()+"')";
pactBaseinfoInnerSignDao.executeSQL(sql);
}
catch (Exception e)
{
//e.printStackTrace();
return false;
}
finally
{
close(fos, fis);
}
return true;
}
/**
* 关闭文件流等对象
*
* @param fos
* @param fis
*/
private void close(FileOutputStream fos, FileInputStream fis)
{
if (fis != null)
{
try
{
fis.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
if (fos != null)
{
try
{
fos.flush();
fos.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
/**
* 得到上传文件的详细路径
* @return
*/
public String getServerFilePath(String folderName)
{
String basePath = ServletActionContext.getRequest()
.getSession()
.getServletContext()
.getRealPath("");
return basePath + "\\" + folderName;
}
删除和下载的关键代码
public class UploadFileAction {
private UploadFileService uploadFileService;
private String fileName;
private InputStream inputStream;
private String appAttachmentId;
private String realPath = ServletActionContext.getServletContext().getRealPath("/");
private Map resultMap=new HashMap();
public String downLoadFile()
{
try
{
Map fp = uploadFileService.queryFileRecordInDB(appAttachmentId);
//下载前先判断数据库中是否存在这个文件
if(null != fp)
{
fileName = (String) fp.get("FILE_NAME");
String path = realPath + fp.get("FILE_URL");
//路径传到前台时路径中的“\”会被认为是转义符,所以保存时保存的“/”,这是作为参数传到后台需要重新替换下。
path = path.replaceAll("/", "\\\\");
inputStream = new FileInputStream(path);
}
}
catch (Exception e)
{
e.printStackTrace();
}
return "downLoad"; //如果dir是绝对路径
}
public String deleteFile()
{
try
{
Map fp = uploadFileService.queryFileRecordInDB(appAttachmentId); <pre name="code" class="html"> //下载前先判断数据库中是否存在这个文件 if (null != fp){String path =(String) fp.get("FILE_URL");@Override
public boolean isOverSize(File file, int size)
{
if (file == null || !file.exists())
{
return false;
}
FileInputStream fis = null;
try
{
double fileSize = file.length()/1000000.0;
if (fileSize <= size)
{
return false;
}
else
{
return true;
}
}
catch (Exception e)
{
e.printStackTrace();
return false;
}
finally
{
if (fis != null)
{
try
{
fis.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
原文:http://blog.csdn.net/yuzongtao/article/details/42213801