大神求助!!!
ssh项目,比如说:数据库里面存放文件的地址,文件存放在项目中,那如何做上传和读取啊?
------解决思路----------------------
用struts2的fileupload
------解决思路----------------------
package com.chzu.tic.action;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class UploadAction extends TeacherBaseAction{
private static final long serialVersionUID = 1L;
private File content;// 文件内容
// 封装上传文件content的类型属性(ContentType)和文件名属性(FileName)
private String contentContentType;
private String contentFileName;
private String savePath;// 上传文件的保存路径,在struts.xml配置相对路径
// 处理登录后的提示信息
private String tip;
com.chzu.tic.model.File ticFile=new com.chzu.tic.model.File();
public File getContent() {
return content;
}
public void setContent(File content) {
this.content = content;
}
public String getContentContentType() {
return contentContentType;
}
public void setContentContentType(String contentContentType) {
this.contentContentType = contentContentType;
}
public String getContentFileName() {
return contentFileName;
}
public void setContentFileName(String contentFileName) {
this.contentFileName = contentFileName;
}
/**
* @return 上传文件放在d盘upload目录, 加上struts.xml配置文件savePath的值
*/
public String getSavePath() {
String directory = "D:"+"\\"+savePath;
File file=new File("D:\\upload");
if (!(file.exists())&&!(file.isDirectory())) {//如果upload文件夹不存在
file.mkdirs();//创建upload文件夹
}
return directory;
}
/**
* 接收struts.xml配置文件中保存文件的相对路径
*
* @param savePath
* struts.xml中配置的保存文件路径savePath的值
*/
public void setSavePath(String savePath) {
this.savePath = savePath;
}
public String getTip() {
return tip;
}
public void setTip(String tip) {
this.tip = tip;
}
/**
*
* 验证用户上传的文件是否存在
*/
public Boolean exit(){
if(teacherService.exit(getContentFileName())){//文件已存在
setTip("相同文件名已存在!");
return true;
}
else {
return false;
}
}
public String execute() throws Exception {
if(exit()){
return "input";
}
// 把上传的文件写入到upload文件夹下
FileOutputStream fos = new FileOutputStream(getSavePath() + "\\"
+ getContentFileName());
FileInputStream fis = new FileInputStream(getContent());
byte[] butter = new byte[1024];
int len = 0;
while ((len = fis.read(butter)) > 0) {
fos.write(butter, 0, len);
}
fos.close();
fis.close();
ticFile.setName(getContentFileName());
ticFile.setPath(getSavePath()+"\\"+getContentFileName());
teacherService.upload(ticFile);
return "success";
}
/**
* 文件大小大于struts.xml全局上传的文件大小,
* 将对参数maximumSize注入失败,即在upload.jsp不能显示上传的文件最大为40M提示
* 重写addActionError方法目的解决struts.xml对内置参数maximumSize可能注入失败
* 另外,在jsp页面会重复提示两次错误信息,原因是用了fileUpload拦截器,又用了默认拦截器
* 不用默认拦截器,收到文件的将为null
* @param anErrorMessage
* 添加文件大小大于struts.xml全局上传的文件大小错误信息
*/
@Override
public void addActionError(String anErrorMessage) {
//从国际化里取值,网上是说文件过大(超过全局文件上传大小)错误信息是
//以the request was rejected because its size开头
//发现是以Request exceeded allowed size limit开头
if (anErrorMessage
.startsWith("Request exceeded allowed size limi")) {
super.addActionError(getText("struts.multipart.maxSize.limit"));
} else {
super.addActionError(anErrorMessage);
}
}
}
<!-- 上传文件 Action-->
<action name="uploadFileAction" class="com.chzu.tic.action.UploadAction">
<!-- 配置struts自带的文件上传fileUpload拦截器 -->
<interceptor-ref name="fileUpload">
<!-- 配置允许上传文件最大为20MB,单位字节 -->
<param name="maximumSize">20971520</param>
</interceptor-ref>
<!-- 需要配置系统默认的的拦截器,在teacherStack拦截器栈中,不然收到文件为null -->
<interceptor-ref name="teacherStack"/>
<!-- 文件上传存储路径 -->
<param name="savePath">upload</param>
<result name="success">/WEB-INF/back/success.jsp</result>
<result name="input">/WEB-INF/back/teacher/upload.jsp</result>
</action>
<!-- 下载文件 -->
<action name="downloadAction" class="com.chzu.tic.action.DownloadAction">
<interceptor-ref name="teacherStack"/>
<result name="success" type="stream">
<param name="inputName">targetFile</param>
<!-- 接收DownloadAction为其注入的值 -->
<param name="contentDisposition">filename="${fileName}"</param>
<param name="bufferSize">4096</param>
</result>
</action>