废话不用说,直接给我代码,必须要能够用的,有注释就更好

解决方案 »

  1.   

    jsp上传文件的代码?
    <input type="file" name="file" />
    备注:form 中加上这段代码enctype="multipart/form-data"
    <form action="" name="" enctype="multipart/form-data">
    </form>
      

  2.   

    网上有很多吧http://wenku.baidu.com/view/b262f607e87101f69e319522.html
      

  3.   


    大哥,给点敬业精神嘛,既然要实现jsp文件上传功能,至少需要两个jsp文件吧,一个文件用来选择文件,另一个文件用来处理接收文件。另外我要完整的代码,只要能运行成功就给分了
      

  4.   

    这个jsp就是用来选择文件的啊、用来接收文件的那不是须要在action中接收的吗?没明白两个jsp是什么意思
      

  5.   


    处理表单不是须要在action中处理吗
      

  6.   

    jsp中这样写
    <form action="" name="" enctype="multipart/form-data">
    <input type="file" name="uf" />
    </form>action中        private File uf;
            private String contentType;
    private String fileName;

    public void setUf(File uf){
    this.uf = uf;
    }

    public void setUfContentType(String contentType){
    this.contentType = contentType;
    }

    public void setUfFileName(String fileName){
    this.fileName = fileName;
    }
            private void uploadFile(int trainId) throws Exception 
      {  

    String targetDirectory = scontext.getRealPath("/upload");
    log.debug("targetDirectory=="+targetDirectory); TrainAttachVO taVO ;
    String newFileName = "";

    //如果没有附件,返回
    if(this.uf == null)
    return;

    for (int i = 0; i < this.uf.length; i++) 
    {
    newFileName = FileUtil.makeFileName(fileName[i]);
    taVO = new TrainAttachVO();
    taVO.setTrain_id(trainId);
    taVO.setSeq(i+1);
    taVO.setFile_nm(fileName[i]);
    taVO.setFile_nm_s(newFileName);
    taVO.setFile_type(contentType[i]);
    //taVO.setFile_size(uf[i].length());

    log.debug("contentType[i]=="+contentType[i]);

    //增加一条附件记录
    taService.create(taVO);

    //得到上传目录和文件名
            File target = new File(targetDirectory, newFileName);
            log.debug("target=="+target);
            System.out.println("path=="+target.getPath());
            FileUtils.copyFile(uf[i], target);  
    }

      }  
      

  7.   

    这是我以前用struts2的时候的例子,你参考一下,改改
    那些 对vo的处理直接删掉就行
      

  8.   


    上面那段代码怎么用?是做为一个类来用吗?那个structs2什么的,我没有学过,我只会用jsp,一个jsp选择要发送的文件,另一个jsp处理接受文件所以如果可以的话,最好还是给我两个jsp文件吧
      

  9.   

    jsp页面:    <form action="UploadServlet" method="post" enctype="multipart/form-data">
        
        username: <input type="text" name="username"><br>
        file: <input type="file" name="file"><br>
        file2: <input type="file" name="file2"><br>
        
        <input type="submit" value="submit">
        
        
        </form>
        
    后台servlet:
    public class UploadServlet extends HttpServlet
    {
        @SuppressWarnings( {"unchecked", "deprecation"})
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException
        {
            DiskFileItemFactory factory = new DiskFileItemFactory();
            
            String path = req.getRealPath("/upload");
            
            factory.setRepository(new File(path));
            factory.setSizeThreshold(1024 * 1024);
            
            ServletFileUpload upload = new ServletFileUpload(factory);
            
            try
            {
                List<FileItem> list = (List<FileItem>)upload.parseRequest(req);
                
                for (FileItem item : list)
                {
                    String name = item.getFieldName();
                    
                    if (item.isFormField())
                    {
                        String value = item.getString();
                        
                        System.out.println(name + "=" + value);
                        
                        req.setAttribute(name, value);
                    }
                    else
                    {
                        String value = item.getName();
                        
                        int start = value.lastIndexOf("\\");
                        String fileName = value.substring(start + 1);
                        
                        req.setAttribute(name, fileName);
                        
                        item.write(new File(path, fileName));
                        //
                        // OutputStream os = new FileOutputStream(new File(path, fileName));
                        //
                        // InputStream is = item.getInputStream();
                        //
                        // byte[] buffer = new byte[400];
                        //
                        // int length = 0;
                        //
                        // while((length = is.read(buffer)) != -1)
                        // {
                        // os.write(buffer, 0, length);
                        // }
                        //
                        // is.close();
                        // os.close();
                    }
                }
                
            }
            catch (Exception ex)
            {
                ex.printStackTrace();
            }
            
            req.getRequestDispatcher("fileUploadResult.jsp").forward(req, resp);
        }
    }
      

  10.   

    汗那、用两个jsp我实现不了我懂得上传文件的,struts1和struts2  思路跟我上面说的那些都一样,只不过实现起来有点不一样,没听说过谁用jsp处理接收文件的
      

  11.   


    大哥,您的代码很明显不完整,DiskFileItemFactory这是什么东西啊再说我只想用两个jsp文件来实现这个功能,这两个jsp文件有这么难写吗?
      

  12.   


    学校里教的不都是用jsp来处理action的吗企业里就不知道了,反正在学校我就只会这种处理方式
      

  13.   

    你把jsp当成servlet不就好了么?就像我给你的代码一样,你在jsp中写不就好了?因为JSP本质上还是servlet可以用来做servlet
      

  14.   


    但你的代码不完整,DiskFileItemFactory,ServletFileUpload这两个类是在哪里定义的?
      

  15.   

    这都是new出来的  jdk自带的。
      

  16.   


    se里面没有,ee里面也没有,不相信可以去查文档再说真的有的话Eclipse怎么可能会报错
      

  17.   

    额 下个jar包 是 commons-fileupload-1.2.3.jar
    和 commons-io-2.0.1.jar  上传的东西是在服务器端的
      

  18.   


    这样做太麻烦了,我只希望用两个jsp文件就能解决问题求大神快出现,救我于水深火热之中吧
      

  19.   

    不是说的很明白吗 我这就可以看成2个jsp  OK?  一个是jsp做的页面,一个是servlet做的服务器,你要用2个JSP的话很简单,你就把JSP当成servlet用不就OK了吗?  JSP 可以当成Servlet用的
      

  20.   

    package tom.jiafei;
    import java.io.*;
    import javax.servlet.http.*;
    public class UpFile{
      HttpServletRequest request;
      HttpSession session;
      String   upFileMessage="";
      public void setRequest( HttpServletRequest request){
       this.request=request;
       }
       public void setSession( HttpSession session){
        this.session=session;
        }
        public String getUpFileMessage(){
        String fileName=null;
        try{String tempFileName=(String)session.getId();
        File f1=new File("C:/2011xinxi/download",tempFileName);
        FileOutputStream o=new  FileOutputStream(f1);
        InputStream in=request.getInputStream();
        byte b[]=new byte[10000];
        int n;
        while((n=in.read(b))!=-1){
       
        o.write(b,0,n);
        }
        o.close();
        in.close();
        RandomAccessFile random =new RandomAccessFile(f1,"r");
        int second=1;
        String secondLine=null;
        while(second<=2){
        secondLine=random.readLine();
        second++;
        }
        int position=secondLine.lastIndexOf('\\');
        fileName=secondLine.substring(position+1,secondLine.length()-1);
        byte cc[]=fileName.getBytes("ISO-8859-1");
        fileName=new String(cc);
        session.setAttribute("Name",fileName);
        random.seek(0);
        long forthEndPosition=0;
        int forth=1;
        while((n=random.readByte())!=-1&&forth<=4){
        if(n=='\n'){
        forthEndPosition=random.getFilePointer();
        forth++;
        }
        }
       
        File f2=new File("C:/2011xinxi/download",fileName);
       
        RandomAccessFile random2 =new RandomAccessFile(f2,"rw");
        random.seek(random.length());
        long endPosition=random.getFilePointer();
        long = endPosition;
        int j=1;
        while((>=0)&&(j<=6))
        {--;
        random.seek();
       
        n= random.readByte();
        if(n=='\n'){
       
        endPosition=random.getFilePointer();
        j++;
        }
       
        }
       
        random.seek(forthEndPosition);
        long startPoint=random.getFilePointer();
        while(startPoint<endPosition-1){
        n=random.readByte();
        random2.write(n);
        startPoint=random.getFilePointer();
        }
        random2.close();
        random.close();
        f1.delete();
            upFileMessage=fileName+"   Successfully Upload";
        return upFileMessage;
        }
        catch( Exception exp){
        if(fileName!=null){ upFileMessage=fileName+"Fail to Upload";
        return upFileMessage;}
        else{upFileMessage="";
        return upFileMessage;
        }
       
       
        }
    }}我刚做的实验
      

  21.   

    example5_9.jsp<%@ page contentType="text/html;charset=gb2312"%>
    <html>
    <body>
    <p>选择要上传的文件:<br>
    <form action="accept.jsp" method="post" enctype="multipart/form-data">
    <input type="FILE" name="boy" size="38">
    <br><input type="submit" name="g" value="提交">
    </form>
    </body>
    </html>
    accept.jsp<%@ page contentType="text/html;charset=gb2312"%>
    <%@ page import="java.io.*"%>
    <html>
    <body>
    <%
    try {
    InputStream in = request.getInputStream();
    File dir = new File("C:/1000");
    dir.mkdir();
    File f = new File(dir, "B.txt");
    FileOutputStream o = new FileOutputStream(f);
    byte[] b = new byte[1000];
    int n;
    while ((n = in.read(b)) != -1)
    o.write(b, 0, n);
    o.close();
    in.close();
    out.print("文件已上传");
    } catch (IOException ee) {
    out.print("上传失败" + ee);
    }
    %></body>
    </html>照书上打的 ,上传上去的文件在文本里没显示、、、、
      

  22.   


    终于有人给我想要的东西了,不过貌似程序运行结果有问题,上传后txt里面的内容不是上传前的txt内容了,请问这是怎么回事?能不能麻烦你再提供一个结果正确的程序
      

  23.   


    好吧,这么跟你说吧,其实我不会用servlet,我只希望用两个jsp文件来实现这个功能,这个要求不过分吧
      

  24.   

    你的什么情况的,我的txt什么显示都没有。
      

  25.   


    比方说我原先上传的文件的内容是hello,world
    上传后的文件的内容是-----------------------------7dc2ee10201fa
    Content-Disposition: form-data; name="boy"; filename="C:\Documents and Settings\zjf\桌面\1.txt"
    Content-Type: text/plainhello,world
    -----------------------------7dc2ee10201fa
    Content-Disposition: form-data; name="g"提交
    -----------------------------7dc2ee10201fa--
    为什么会多出好几行东西呢?
      

  26.   

    丫的,看LZ这答复我就不想回答了,LS各位的回复都挺好的,LZ的回答让人失望,做开发的写代码就是贴那里的拷那里的弄到一起能用,你都不懂得变通,搞个抓娃子啊。
      

  27.   

    楼主试试这个控件:http://www.cnblogs.com/xproer/archive/2010/10/24/1859895.html
    此控件是基于标准HTTP协议实现的文件上传功能。优势是扩展性非常好,整合简单,支持批量上传文件和上传文件夹功能,适合各种简单WEB项目。
    另外一个特点是支持自动上传指定的本地文件。单文件上传演示上传本地文件代码
    使用步骤如下:
    1.调用AddFile函数添加本地文件,注意路径需要使用双斜框(\\)
    2.调用PostFirst函数开始上传文件。<script type="text/javascript" language="javascript">
         var uploaderMgr = new HttpUploaderMgr();
         uploaderMgr.Load();//加载控件 window.onload = function()
    {
    uploaderMgr.Init();//初始化控件
    //添加一个本地文件
    uploaderMgr.AddFile("D:\\Soft\\QQ2010.exe");
    uploaderMgr.PostFirst(); };
    </script>
     单文件整合代码: 服务器返回消息:<input id="txtFilePath" type="text" size="50" />
    <script type="text/javascript" language="javascript">
    var uploaderMgr = new HttpUploaderSingleMgr();
    uploaderMgr.Config["PostUrl"] = "http://localhost:8080/asp.net/upload.aspx";
    uploaderMgr.Load();
    //文件上传完成后执行的回调函数
    uploaderMgr.CompleteHook = function(msg)
    {
    document.getElementById("txtFilePath").value = msg;
    }; window.onload = function()
    {
    uploaderMgr.Init();
    };
    </script>示例下载:
    CAB安装包
    开发文档
    ASP示例
    ASP.NET示例
    JSP示例
    PHP示例
      

  28.   


    难道程序员的工作就是复制+粘贴吗?难怪现在码工这么多而且我的要求也不怎么过分吧,只是要两个jsp文件而已两个文件加起来我看也不会超过100行吧,怎么就没有人写一个出来呢?还是求高手给个能用的jsp程序
      

  29.   

    楼下注意了,不要servlet,不要struts,我只要两个jsp文件而且两个jsp文件要像26楼那样可以使用,不要附带一大堆没用的东西和错误就贴上来或者大家水平牛一点的,帮忙改一下26楼的程序他的程序的运行结果比标准的运行结果多了个头和尾,但目前我也不知道jsp传文件时里面的具体格式是怎么样的,所以不会改或者大家给我讲解一下jsp传文件时的里面的格式是怎么样的吧,我自己试着修改一下26楼的程序当然,还是期待有人能够贴出正确的代码哈
      

  30.   

    UploadExample.jsp
     
    <%@ page contentType="text/html;charset="UTF-8"%>
    <html>
    <title><%= application.getServerInfo() %></title>
    <body><form action="doUpload.jsp" method="post" enctype="multipart/form-data">
    <input type="file" name="upfile" size="50">
    <input type="submit" value="提交">
    </form>
    </body>
    </html>
     
    doUpload.jsp
     
    <%@ page contentType="text/html; charset=GBK" %>
    <%@ page import="java.io.*"%>
    <%@ page import="java.util.*"%>
    <%@ page import="javax.servlet.*"%>
    <%@ page import="javax.servlet.http.*"%>
    <html><head><title>upFile</title></head>
    <body bgcolor="#ffffff">
    <%
    //定义上载文件的最大字节
    int MAX_SIZE = 102400 * 102400;
    // 创建根路径的保存变量
    String rootPath;
    //声明文件读入类
    DataInputStream in = null;
    FileOutputStream fileOut = null;
    //取得客户端的网络地址
    String remoteAddr = request.getRemoteAddr();
    //获得服务器的名字
    String serverName = request.getServerName();//取得互联网程序的绝对地址
    String realPath = request.getRealPath(serverName);
    realPath = realPath.substring(0,realPath.lastIndexOf("\\"));
    //创建文件的保存目录
    rootPath = realPath + "\\upload\\";
    //取得客户端上传的数据类型
    String contentType = request.getContentType();
    try{
    if(contentType.indexOf("multipart/form-data") >= 0){
    //读入上传的数据
    in = new DataInputStream(request.getInputStream());
    int formDataLength = request.getContentLength();
    if(formDataLength > MAX_SIZE){
    out.println("<P>上传的文件字节数不可以超过" + MAX_SIZE + "</p>");
    return;
    }
    //保存上传文件的数据
    byte dataBytes[] = new byte[formDataLength];
    int byteRead = 0;
    int totalBytesRead = 0;
    //上传的数据保存在byte数组
    while(totalBytesRead < formDataLength){
    byteRead = in.read(dataBytes,totalBytesRead,formDataLength);
    totalBytesRead += byteRead;
    }
    //根据byte数组创建字符串
    String file = new String(dataBytes);
    //out.println(file);
    //取得上传的数据的文件名
    String saveFile = file.substring(file.indexOf("filename=\"") + 10);
    saveFile = saveFile.substring(0,saveFile.indexOf("\n"));
    saveFile = saveFile.substring(saveFile.lastIndexOf("\\") + 1,saveFile.indexOf("\""));
    int lastIndex = contentType.lastIndexOf("=");
    //取得数据的分隔字符串
    String boundary = contentType.substring(lastIndex + 1,contentType.length());
    //创建保存路径的文件名
    String fileName = rootPath + saveFile;
    //out.print(fileName);
    int pos;
    pos = file.indexOf("filename=\"");
    pos = file.indexOf("\n",pos) + 1;
    pos = file.indexOf("\n",pos) + 1;
    pos = file.indexOf("\n",pos) + 1;
    int boundaryLocation = file.indexOf(boundary,pos) - 4;
    //out.println(boundaryLocation);
    //取得文件数据的开始的位置
    int startPos = ((file.substring(0,pos)).getBytes()).length;
    //out.println(startPos);
    //取得文件数据的结束的位置
    int endPos = ((file.substring(0,boundaryLocation)).getBytes()).length;
    //out.println(endPos);
    //检查上载文件是否存在
    File checkFile = new File(fileName);
    if(checkFile.exists()){
    out.println("<p>" + saveFile + "文件已经存在.</p>");
    }
    //检查上载文件的目录是否存在
    File fileDir = new File(rootPath);
    if(!fileDir.exists()){
    fileDir.mkdirs();
    }
    //创建文件的写出类
    fileOut = new FileOutputStream(fileName);
    //保存文件的数据
    fileOut.write(dataBytes,startPos,(endPos - startPos));
    fileOut.close();
    out.println(saveFile + "文件成功上载.</p>");
    }else{
    String content = request.getContentType();
    out.println("<p>上传的数据类型不是multipart/form-data</p>");
    }
    }catch(Exception ex){
    throw new ServletException(ex.getMessage());
    }
    %>
    </body>
    </html>
    运行方法,将这两个JSP文件放在同一路径下,运行UploadExample.jsp即可。
      

  31.   


    40楼是可以的,
    文件被上传到:tomcat下\\webapps\\你的项目名\\upload文件夹中
      

  32.   

    tomcat安装路径\webapps\XX工程名\upload\
      

  33.   


    但是我用的是Eclipse建立的工程,项目名是album,但貌似tomcat\webapps\album\upload这个文件夹压根不存在,而且连tomcat\webapps\album这个文件夹也不存在,太奇怪了有谁知道如果是用Eclipse运行的话,文件被上传到哪里去了呢?
      

  34.   

    http://nakupanda.iteye.com/blog/352127
    里面有去掉多余行的代码,不过有点复杂