struts自己可以实现上传,spring也有上传下载的jar包,自己百度一下
解决方案 »
- 莫名其妙的 java.lang.NoSuchMethodError
- window和document问题
- 烦人的乱码问题,进来帮忙看看,多谢了.linux 环境下:我用JDBC从数据库里面取出来数据,在后台用
- 删除数据
- JSP 网上银行支付接口
- wml文件能应用于struts吗?如果可以,怎么用???
- [求助]:在Deamweaver中的"JDBC自定义"中设置后出现如下错误对话框:
- 我有一个类, public static void main(String[] args) …………,JSP该如何调用
- 求java class加密Tomact下classloader修改例子
- 一个关于JTable的问题,十万火急,请高手们赐教
- 菜鸟级求一篇基于JSP+SQL编写的BBS论坛系统代码,可运行,有截图的论坛
- JS调用JAVA创建的webservice服务
但是附件一般都不存数据库的,数据库只是存附件路径private String fileDesc;
private File file;
private String fileFileName;// 命名要规范,前面是所上传文件后面是FileName,表示上传文件名
private String fileContentType;// 同上上传文件类型
//getter and setter
public String execute() {
// 取到服务器上传文件存放的路径
String path = ServletActionContext.getServletContext().getRealPath(
"/Files/");
// 取到上传文件的完整路径
String FilePath = path + File.separator + fileFileName;
InputStream is = null;
OutputStream os = null;
try {
is=new FileInputStream(file);
os=new FileOutputStream(FilePath);
byte[] b=new byte[1024];
int len=0;
while((len=is.read(b))!=-1){
os.write(b,0,len);
os.flush();
}
is.close();
os.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return "success";
}下载简单
一般的附件或者图片的处理方案:
1、可以把附件存到服务器上,然后把路径存到数据库。下次从数据库拿到指定路径的文件即可。
2、以二进制直接把文件存到数据库。
2、以二进制直接把文件存到数据库。
真的不建议把文件直接放到数据库里,库里只存文件路径就好。
我之前做过,在action里把文件上传到FTP上,写入读取都要先登录FTP,感觉比直接存到服务器的安全性高些。Good Luck!
参考地址
下载更简单了,网上搜,很多例子。。
//定义SmartUpload对象
SmartUpload upload = new SmartUpload();
//初始化
upload.initialize(this.getServlet(), request, response);
//上传文件
upload.upload();
//获取上传文件中的第一个
SmartFile myFile = upload.getFiles().getFile(0);
//取得文件名
String filename = myFile.getFileName();
//判断是否上传了,没有则返回上传页面
if(filename.length()==0){
request.setAttribute("msg", "请选择要上传的文件!");
return mapping.findForward("imprt");
} else{
//在服务器上创建存储上传文件的路径
String url=this.class.getResource("/").toString();
int lastIndex=url.length()-16;
String filePath=url.toString().substring(6,lastIndex)+"upload/";
File f=new File(filePath);
f.mkdirs();
//存储,SAVEAS_PHYSICAL以操作系统的根目录为文件根目录另存文件
myFile.saveAs(filePath+filename, myFile.SAVEAS_PHYSICAL);
request.setAttribute("filePath",filePath+filename );
//保存文件扩展名
request.setAttribute("fileExt",myFile.getFileExt() );
}
应用Struts框架实现文件上传无须添加JAR包,使用<html:file>标签生成<input type=file>元素来实现。具体上网搜一下。
使用Spring的话其文件上传功能是通过Struts提供的commons-fileupload组件来实现。
具体代码操作网上搜。
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;import Copackage.Socket.SendData;import com.opensymphony.xwork2.ActionSupport;
//struts2接收前台文件上传控件方法
public class upuserpicaction extends ActionSupport{
private static final long serialVersionUID = 742220866388022377L;
private File filepic; // 用户上传的文件 这里名字需跟前台控件的name一致
private String filepicFileName; // 上传文件的文件名
private String filepicContentType;// 上传文件的类型
private String description;// 用户的描述
/* * SingleFileUploadAction的属性的getter和setter办法 */
public File getFilepic(){
return filepic;
}
public void setFilepic(File filepicFile){
this.filepic = filepicFile;
}
public String getFilepicFileName(){
return filepicFileName;
}
public void setFilepicFileName(String filepicFileName){
this.filepicFileName = filepicFileName;
}
public String getFilepicContentType(){
return filepicContentType;
}
public void setFilepicContentType(String filepicContentType){
this.filepicContentType = filepicContentType;
}
public String getDescription(){
return description;
}
public void setDescription(String description){
this.description = description;
}
public void upload()throws Exception {
HttpServletRequest request=ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
PrintWriter out = null;
try {
out = response.getWriter();
} catch (IOException e) {
e.printStackTrace();
}
String filename = request.getParameter("userid");
try{
if(!"".equals(filename)){
File file = filepic;
int nPos = getFilepicFileName().lastIndexOf(".");
if(nPos > 0){
String savepath = request.getRealPath("/AffixFiles\\UserPic")+"/".replace("\\", "/");
String sname = getFilepicFileName().substring(nPos);
String filepath = savepath +"pic"+ filename + sname;
File fdir = new File(savepath);
if(!fdir.exists())
fdir.mkdirs();
File ffile = new File(filepath);
if(!ffile.exists())
ffile.delete();
File savedFile = new File(filepath);// 上传文件存放位置
filepic.renameTo(savedFile);// 将上传文件复制到指定文件
String InXml = "[" + request.getRemoteAddr() + "].[0.0." + filename + ".0.0.0]SetValue(USERPIC)(pic" + filename + sname+ ")";
String OutXml= "";
//转发服务处理
SysSocket ts = new SysSocket();
try{
OutXml = ts.send(InXml);
}catch(Exception ex){
OutXml = "1;" + ex.getMessage();
}
}
out.write("{success:true,msg:'成功'}");
}
}catch(Exception ex){
out.write("{success:true,msg:'" + ex.getMessage() + "'}");
}
}
}
数据库里存储path熟悉就可以了,真正的文件存到硬盘里即可