idea图片从服务器获取失败问题

idea图片从服务器获取失败问题

<%@page import="com.imooc.domain.User"%>
<%@page language="java" contentType="text/html; charset=UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>登录成功</title>
    <link rel="stylesheet" href="./css/login.css">
</head>
<body>
<div class="login">
    <%
    String username="";
//    如果当前用户登录成功
    if (session.getAttribute("user")!=null){
       User u= (User) session.getAttribute("user");
       username=u.getUsername();
       //获取用户头像(默认发布在out文件下,不能直接访问)路径,这个路径只是为了获取文件名,并不能直接访问
       String path=u.getPath();
       //获取头像唯一文件名
       String flieName=path.substring(path.lastIndexOf("\\")+1);


//    如果页面在服务器上,浏览器出于安全考虑是不允许html访问本地文件的。
//    不会允许浏览器打开file:开头的本地图片的。
//    所以这里我们需要使用bashPath/upload/fileName来访问图片

//      获取上下文路径即项目名
       String path1=request.getContextPath();
       //获取文件上传到服务器上的路径
    String basepath=request.getScheme()+"://"+request.getServerName()+":"+
    request.getServerPort()+path1+"/";
        System.out.println(basepath);
    %>
    <div class="header">
        <h1>登录成功</h1>
    </div>
        <div class="content">
                <table align="center">

            <tr>
                <td align="center"><img src="<%=basepath%>/upload/<%=flieName%>"/></td>
            </tr>
            <tr>
                <td align="center">欢迎<%=username%>,登录成功!</td>
            </tr>
    </table>
</div>
    <%
    }
    else {
    %>
    <%--如果用户没有登录则提示用户登录--%>

    <div class="header">
        <h1>你还没有登录,请<a href="/reg_login/login.jsp">登录</a></h1>
    </div>
        <%
        }
        %>
</div>
</body>
</html>

图片是上传到了out下的目录,如下图

http://img1.sycdn.imooc.com//climg/5c5447d8000181b704610324.jpg

在success.jsp获取图片时,是按照一位老师的方法写的路径,但是登录成功后图片不显示

//      获取上下文路径即项目名
      String path1=request.getContextPath();
      //获取文件上传到服务器上的路径
   String basepath=request.getScheme()+"://"+request.getServerName()+":"+
   request.getServerPort()+path1+"/";

User u= (User) session.getAttribute("user");
username=u.getUsername();
//获取用户头像(默认发布在out文件下,不能直接访问)路径,这个路径只是为了获取文件名,并不能直接访问
String path=u.getPath();
//获取头像唯一文件名
String flieName=path.substring(path.lastIndexOf("\\")+1);

我的路径是<%=basepath%>/upload/<%=fileName%>

关键是输入http://localhost:8080/reg_login/upload/fileName都不显示图片的,而且通过电脑文件夹本地访问out/.../upload下的图片都不显示。

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

你好!看你的代码图片是上传成功了,我把你的代码改了一下,测试没有问题,你可以用我的代码测试一下,把String path="upload\\tushu.jpeg";这条语句中的path改成你的路径就可以,可以是相对路径,也可以是本地的绝对路径。然后看一下输出结果。也可以现在你当前的代码中调试,在浏览器运行,按F12,看浏览器的Console有什么错误提示,根据提示寻找线索,也可以截图贴出来

<%@page language="java" contentType="text/html; charset=UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>登录成功</title>
    <link rel="stylesheet" href="./css/login.css">
</head>
<body>
<div class="login">
    <%
    String username="";
//    如果当前用户登录成功
  //  if (session.getAttribute("user")!=null){
       //User u= (User) session.getAttribute("user");
       //username=u.getUsername();
       //获取用户头像(默认发布在out文件下,不能直接访问)路径,这个路径只是为了获取文件名,并不能直接访问
       //String path=u.getPath();
       String path="upload\\tushu.jpeg";
       //获取头像唯一文件名
       String flieName=path.substring(path.lastIndexOf("\\")+1);
       System.out.println("filiName:"+flieName);
 
 
//    如果页面在服务器上,浏览器出于安全考虑是不允许html访问本地文件的。
//    不会允许浏览器打开file:开头的本地图片的。
//    所以这里我们需要使用bashPath/upload/fileName来访问图片
 
//      获取上下文路径即项目名
       String path1=request.getContextPath();
       //获取文件上传到服务器上的路径
    String basepath=request.getScheme()+"://"+request.getServerName()+":"+
    request.getServerPort()+path1+"/";
        System.out.println(basepath);
    %>
    <div class="header">
        <h1>登录成功</h1>
    </div>
        <div class="content">
                <table align="center">
 
            <tr>
                <td align="center"><img src="<%=basepath%>/upload/<%=flieName%>"/></td>
            </tr>
            <tr>
                <td align="center">欢迎<%=username%>,登录成功!</td>
            </tr>
    </table>
</div>
   
</div>
</body>
</html>

祝学习愉快!

  • 给大佬递茶 提问者 #1
    我这个获取是没有问题,我刚才看了下,是上传的问题,上传的本地图片都打不开,忘记 while ((len = inputStream.read(bytes)) != -1) { outputStream.write(bytes, 0, len); } 写bytes了,我把输出路径改成webapp下的reg_login,并在reg_login下创建了upload,目录,这样就输出到webaap下了,和eclipse一样,我想如果路径还是换成out,还是能够输出的,不过就是获取输出路径要多写String path1=request.getContextPath(); //获取文件上传到服务器上的路径 String basepath=request.getScheme()+"://"+request.getServerName()+":"+ request.getServerPort()+path1+"/"; 现在已经好了,谢谢老师放假了还要关注同学。。。
    2019-02-02 11:11:41
提问者 给大佬递茶 2019-02-01 21:29:28
String fileName=fileItem.getName();
    if (fileName!=null&&!"".equals(fileName)) {
        String uuidFileName = FileUtil.getUUIDFileName(fileName);
        //获取文件输入流
        InputStream inputStream = fileItem.getInputStream();
        //获取要往里输出数据的文件路径,往哪儿输出
        String path = this.getServletContext().getRealPath("/upload");
        //构建文件的url
        url = path + "\\" + uuidFileName;
        //创建输出流
        OutputStream outputStream = new FileOutputStream(url);
        int len = 0;
        byte[] bytes = new byte[1024];
        //写入文件到upload文件夹下
        while ((len = inputStream.read()) != -1) {
            outputStream.write(bytes, 0, len);
        }
        inputStream.close();
        outputStream.close();
    }
}

这是文件上传的代码

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
从网页搭建入门Java Web2018版
  • 参与学习           人
  • 提交作业       1088    份
  • 解答问题       10204    个

如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师