Code Bye

ssh上传及读取文件

大神求助!
              ssh项目,比如说:数据库里面存放文件的地址,文件存放在项目中,那如何做上传和读取啊?


10分
用struts2的fileupload

30分
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>

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明ssh上传及读取文件