日期:2014-05-18  浏览次数:20616 次

100分 请教struts怎么实现上传下载,(分不够另开贴再加!)
请教各位大虾,我对上传和下载的基本原理和思想不是很清楚,还有就是关于数据库方面的。比如现在我有4个类别,每个类别分别对应相应的文件,数据库是存放文件的目录(真实路径还是。。)还是文件名称抑或是两者都存,或者。。。还有4个类别就分别建立4个文件夹来存储用户上传的文件吗?还是用其他的方法?能不能提供一个详细的数据库表结构,让小弟参考一下,谢谢,不甚感激!

------解决方案--------------------
下载用继承于DownloadAction类
上传用FormFile类,记得下载Commons FileUpload包
------解决方案--------------------
上传的action

Java code

/*
 * Generated by MyEclipse Struts
 * Template path: templates/java/JavaClass.vtl
 */
package com.loner.struts.action;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;

import com.loner.struts.form.FileForm;

/** 
 * MyEclipse Struts
 * Creation date: 12-08-2007
 * 
 * XDoclet definition:
 * @struts.action path="/file" name="fileForm" input="/file.jsp" scope="request" validate="true"
 */
public class FileAction extends Action {
    /*
     * Generated Methods
     */

    /** 
     * Method execute
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return ActionForward
     */
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {
        
        FileForm fileForm = (FileForm) form;
        
        String dir = servlet.getServletContext().getRealPath("/upload");//获得一个目录,这个目录
        
        
        FormFile file = fileForm.getFile();//取得文件的值
        
        
        String fname = file.getFileName();//取的文件名
        
        
        String fsize = Integer.toString(file.getFileSize())+"bytes";//取得文件大小
        
        try{
            InputStream streamIn = file.getInputStream();//构建一个流对象
            
            OutputStream streamout = new FileOutputStream(dir+"/"+fname);
            

            
            
            int bytesRead = 0;
            
            byte[] buffer = new byte[8192];//定义一个字节数组
            while((bytesRead=streamIn.read(buffer,0,8192))!=-1){//如果还有内容就写入定义的变量中
                
                
                streamout.write(buffer,0,bytesRead);//利用输出流对象输出

            }
            streamout.close();
            streamIn.close();

        }catch(Exception ex){
            ex.printStackTrace();
        }
        
        return null;
    }
}

------解决方案--------------------
数据库存文件可以用BLOB直接存成二进制也可以村文件的路径,
用二进制的话,可以用流直接导入数据库存储下来, 读的时候就再用流导出来即可
用文件路径的话,数据库里只是存一个字符串而已,数据库对这个文件的存在并不知道。
读出时,先从数据库中读出文件的路径,然后根据这一路径读出文件即可。

至于lz说的4个类 就建4个文件夹 这完全取决与程序员的选择,你可以建或者不建,
甚至你把文件直接放在C盘根目录,只要数据库中的路径保存正确,你就可以正确读出该文件
------解决方案--------------------
http://blog.csdn.net/hy0231/archive/2008/12/19/3555957.aspx
这里很清楚。
------解决方案--------------------
上传的话可以使用一些插件,网上很多,下载也可以,下载也可以把文件的地址作为链接也可以实现下载的效果。
上传的话把上传文件的名字(通过国际化把中文乱码解决),上传到空间的路径都写进数据库,读取时直接把名字和路径拿出来就可以了
------解决方案--------------------
我刚刚做了这个模块!全部代码提供,全面支持!顶 305954240 兄弟多多给我分呀 也是struts的 servlet+jsp的做过,简单的
------解决方案--------------------
上传下载我就不说了...>_<
数据库结构我说下我的想法
你有4个类别..那你建个类别表...
很简单的表..typeId 主键, typeName 名称, typeFilePath 这个类型的文件夹路径, ...还有你可以加几个remark注释...

这样方便以后有第5,第6...类别的增加.
再建个文件表