struts2上传文件时,返回再上传,为什么文件名字会叠起来?

94139314 2014-12-26 02:58:21
struts2上传文件时,返回再上传,为什么文件名字会叠起来?


有什么办法不要叠起来,名字相同就覆盖呢?

Action类:
package com.action;

import com.action.Dao;
import com.opensymphony.xwork2.ActionSupport;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

import org.apache.struts2.ServletActionContext;

public class upload extends ActionSupport{

private String username;
private File photo;
private String photoContentType;
private String photoFileName;


public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public File getPhoto() {
return photo;
}
public void setPhoto(File photo) {
this.photo = photo;
}
public String getPhotoContentType() {
return photoContentType;
}
public void setPhotoContentType(String photoContentType) {
this.photoContentType = photoContentType;
}
public String getPhotoFileName() {
return photoFileName;
}
public void setPhotoFileName(String photoFileName) {
this.photoFileName = photoFileName;
}
public String execute() throws Exception{

System.out.println("名字:"+getPhotoFileName());

if(getPhotoFileName()!=null && isEnableUploadType(1,getPhotoFileName())){
String filename=ServletActionContext.getRequest().getRealPath("/images").replaceAll("\\\\", "/") +"/"+getPhotoFileName();
/*String filename=ServletActionContext.getServletContext().getRealPath("/images");*/
System.out.println(filename);
FileOutputStream fos = new FileOutputStream(filename);
FileInputStream fis =new FileInputStream(getPhoto());
/* byte[] buf =new byte[1024];
int len=0;
while((len=fis.read(buf))>0){
fos.write(buf,0,len);
}*/
String pic="images/"+getPhotoFileName();
Dao dao =new Dao();
String sql = "insert into admin(name,pic) values('"+getUsername()+"','"+pic+"')";
System.out.println("数据:"+sql);
dao.executeUpdate(sql);
if(fis!=null)fis.close();
if(fos!=null)fos.close();
}else{
addFieldError("photo", "对不起,图片类型不正确!");
return INPUT;
}

return SUCCESS;
}
private static boolean isEnableUploadType(int filetype, String filename) {
// TODO Auto-generated method stub
String enableExtName=null;
int p=filename.lastIndexOf(".");
String fileExtName=filename.substring(p).toLowerCase();
if(filetype==1){//图片类型
enableExtName=".jpg,.gif,.png,.bmp";
}else if(filetype==2){
enableExtName=".flv,.mpg,.wmv,.rm";
}
if(enableExtName!=null){
if(enableExtName.indexOf(fileExtName)!=-1)return true;
else return false;
}else{
return true;
}
}
}
...全文
116 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
94139314 2014-12-29
  • 打赏
  • 举报
回复
引用 2 楼 dalor 的回复:
楼上,他那句就单写在那,用到filename的代码都被注释了,怎么可能问题在那.
问题应该是 photoFileName,看调用setPhotoFileName这个方法的地方,
不管单张还是多张上传,找保存文件名的变量准没错.


这是struts2默认调用的,在哪改呢?能具体点吗?我发现是表单加了enctype="multipart/form-data" ,害文本框的内容也叠加了,不过不加enctype="multipart/form-data"就上传不了图片:
94139314 2014-12-29
  • 打赏
  • 举报
回复
求大神呀!!!!!!!!!!!!!!
开发者_android 2014-12-26
  • 打赏
  • 举报
回复
楼上,他那句就单写在那,用到filename的代码都被注释了,怎么可能问题在那. 问题应该是 photoFileName,看调用setPhotoFileName这个方法的地方, 不管单张还是多张上传,找保存文件名的变量准没错.
小老头头 2014-12-26
  • 打赏
  • 举报
回复
String filename=ServletActionContext.getRequest().getRealPath("/images").replaceAll("\\\\", "/") +"/"+getPhotoFileName(); 肯定是这句错了调调看呗

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧