• 【JSP】上传图片到数据库中


     1 第一步:建立数据库 
     2 create table test_img(id number(4),name varchar(20),img long raw); 
     3 第二步:(NewImg.html) 
     4 <html><head><title>添加图片</title></head> 
     5 <body> 
     6 添加图片<br> 
     7 <form method="post" action="insertNews.jsp"> 
     8 图像ID:<input name="id" size="10"> 
     9 <br> 
    10 选择图像:<input type="file" name="image"> 
    11 <br> 
    12 <input type="submit" value="上传" name="submit" size="25"> 
    13 <input type="reset" value="清除" name="clear" size="25"> 
    14 <br> 
    15 </form> 
    16 </body></html> 
    17 第三步:插入数据库(InsertImg.jsp) 
    18 <%@ page language="java"%> 
    19 <%@ page contentType="text/html;charset=gb2312" %> 
    20 <%@ page import="java.util.*" %> 
    21 <%@ page import="java.sql.*"%> 
    22 <%@ page import="java.text.*"%> 
    23 <%@ page import="java.io.*"%> 
    24 <% 
    25 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); //com.microsoft.jdbc.sqlserver.SQLserveDriver
    26 String url="jdbc:oracle:thin:@lubin:1521:b2bdb";               //jdbc:microsoft:sqlserver://127.0.0.1:1433;  jdbc:microsoft.sqlserver://127.0.0.1:1433
    27 Connection con=DriverManager.getConnection(url,"demo","demo"); 
    28 //插入数据库 
    29 String sql="insert into test_img values (?,?,?)"; 
    30 //获取传值ID 
    31 String id=request.getParameter("id"); 
    32 //获取image的路径 
    33 String kk=request.getParameter("image"); 
    34 //转换成file格式 
    35 File filename=new File(kk); 
    36 //将文件的长度读出,并转换成Long型 
    37 long l1=filename.length(); 
    38 int l2=(int)l1; 
    39 //以流的格式赋值 
    40 FileInputStream fis=new FileInputStream(filename); 
    41 PreparedStatement ps =con.prepareStatement(sql); 
    42 ps.setString(1,id); 
    43 ps.setString(2,filename.getName()); 
    44 ps.setBinaryStream(3,fis,l2); 
    45 //ps.setBinaryStream(3,fis,fis.available()); 
    46 ps.executeUpdate(); 
    47 //ps.execute(); 
    48 ps.close(); 
    49 fis.close(); 
    50 out.println("ok!!!"); 
    51 %> 
    52 第四步:显示图片(ShowImg.jsp) 
    53 <%@ page language="java" import="java.sql.*"%> 
    54 <%@ page import="java.io.*"%> 
    55 <%@ page contentType="text/html;charset=gb2312"%> 
    56 <% 
    57 Class.forName("oracle.jdbc.driver.OracleDriver"); 
    58 String url="jdbc:oracle:thin:@lubin:1521:b2bdb"; 
    59 String image_id = (String) request.getParameter("ID"); 
    60 Connection con=DriverManager.getConnection(url,"demo","demo"); 
    61 PreparedStatement sql=con.prepareStatement("select * from test_img WHERE id = " + image_id); 
    62 ResultSet rs = sql.executeQuery(); 
    63 rs.next(); 
    64 //输入img字段内容到in 
    65 InputStream in = rs.getBinaryStream("img"); 
    66 //以下可是任何处理,比如向页面输出: 
    67 response.reset(); 
    68 response.setContentType("image/jpeg"); 
    69 byte[] b = new byte[1024]; 
    70 int len; 
    71 while((len=in.read(b)) >0) 
    72 response.getOutputStream().write(b,0,len); 
    73 in.close(); 
    74 rs.close(); 
    75 %>

    上传页面 一定要用POST 还要l加一个属性 enctype="multipart/form-data", 进去了才解析请求体才能得到的

    你写 <file name="filename" /> 你在服务端 request.getParameter("filename"); 是得不到的
    因为这些数据和 上传的文件流都封装在请求体中, 要解析的

    你如果只要文件名: 可以这样
    <file name="file" />
    <hidden type="text" name="filename" /> 

    <%--
    类型enctype用multipart/form-data,这样可以把文件中的数据作为流式数据上传,不管是什么文件类型,均可上传。
    --%>

  • 相关阅读:
    多数据源 + Configuration中bean依赖注入顺序问题
    mysql 示例数据库安装
    mysql隔离级别与锁,接口并发响应速度的关系(1)
    management & Actuator
    SpEL
    N/A的含义
    设置U盘图标
    c语言指针
    Decorator(装饰器)
    Lambda Expression
  • 原文地址:https://www.cnblogs.com/tenderwx/p/5469167.html
Copyright © 2020-2023  润新知