本来存进数据库的路径名称应该是E:\s\这种才对,怎么放进数据库就变成了E:S这样了,这样我读出图片就肯定显示不了了

解决方案 »

  1.   

    应该数据库不支持直接插入\,因为这是一个特殊字符,使用File.separator替换试一下
      

  2.   

    额。什么意思???我的代码是以下
    <%@page import="java.sql.*"%>
    <%@page import="java.io.*"%>
    <%@page import="java.util.*"%>
    <%@page import="com.oreilly.servlet.MultipartRequest"%>
    <%@page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>
    <%@page contentType="text/html; charset=gb2312" %>
    <html> 
    <%
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    Connection d = DriverManager.getConnection("jdbc:mysql://localhost:3306/learnjsp?user=chen&password=8811098");
    Statement stmt=d.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
    String ph_CateID=request.getParameter("ph_CateID");     
    String ph_Name=request.getParameter("ph_Name");
    String message=request.getParameter("message");
    String saveDirectory ="E:/Jbuilder/workspace/123/WebContent/upload";
    //每个文件最大5m,最多3个文件,所以...
    int maxPostSize =3 * 5 * 1024 * 1024 ;
    //response的编码为"gb2312",同时采用缺省的文件名冲突解决策略,实现上传
    MultipartRequest multi =
           new MultipartRequest(request, saveDirectory, maxPostSize,
                                "gb2312");//输出反馈信息
    Enumeration files = multi.getFileNames();
         while (files.hasMoreElements()) {
            System.err.println("ccc");
           String name = (String)files.nextElement();
           File f = multi.getFile(name);
           if(f!=null){
             String fileName = multi.getFilesystemName(name);
             String lastFileName= fileName;
          stmt.executeUpdate("INSERT INTO photo(ph_CateID,ph_Name,message,piccontent) VALUES('"+ph_CateID+"','"+fileName+"','"+message+"','"+f+"')");
             out.println("上传的文件:"+f);
             out.println("<hr>");       }
         }%>
    </html>
      

  3.   

    这个,一般做法是不把绝对路径放到数据库里的,因为这个绝对路径一般是在SERVLET或者JSP或者ACTION里获得.
    用request.getSession().getServletContext().getRealPath()可以获得WEB服务的绝对路径,就类似你项目里的
    E:/Jbuilder/workspace/123/WebContent/, (JBUDER很久不用了,有点忘记,不过应该是这个,呵呵)
    到这里你就可以直接指定图片路径了.而数据库里只有图片的文件名,到SERVLET或者JSP或者ACTION里去拼接.具体方法这样(HOHO,正好无聊,帮你写写)String webPath = request.getSession().getServletContext().getRealPath();(这里最好你自己用IDE的提示提出来,我手写的,万一错了会害死你,哈哈)String filePath = webPath+"/*upload(?这个是你图片在WEB上的相对路径)*/"+fileName;//fileName从数据库里扯出来哦,页面上就扔filePath去显示吧,OY~~~~~~插库,你的String saveDirectory ="E:/Jbuilder/workspace/123/WebContent/upload"; 这一大串就干掉了,丢文件名就好了.恩恩,搞定.
      

  4.   

    啊!果然错了点.....NND,手写就是会忘记点什么什么什么,修改: request.getSession().getServletContext().getRealPath("/")少加一"/",郁闷
      

  5.   

    直接把图片的名字存起来不是很好嘛        
         SmartUpload picdoc=new SmartUpload(); picdoc.initialize(pageContext); //初始化 //picdoc.service(request,response); //接收请求 picdoc.upload(); //上传
    //对你的图片重命名  productupload为你存入图片的地方
          String rename = null;
        if(!picdoc.getFiles().getFile(0).getFileExt().equals("")){
         rename = "jinli_" + dateString +"."+picdoc.getFiles().getFile(0).getFileExt();
         picdoc.getFiles().getFile(0).saveAs("productupload/"+rename,picdoc.SAVE_VIRTUAL);
        }
    String sql = "insert into photo values(?,?,?,?)";
    PreparedStatement pstmt = con.prepareStatement(sql);
    pstmt.setString(4,rename);
    //