当前位置: 代码迷 >> J2EE >> ssh上传及读取文件解决思路
  详细解决方案

ssh上传及读取文件解决思路

热度:91   发布时间:2016-04-17 23:12:59.0
ssh上传及读取文件
大神求助!!!
              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>
  相关解决方案