java:servlet接收图片,并把它保存到数据库中

java:servlet接收图片,并把它保存到数据库中,第1张

这种代码网上不是一大片吗

public boolean storeImage(File file){

        try{

            // 打开文件

            FileInputStream fin = new FileInputStream(file)

            // 建一个缓冲保存数据

            ByteBuffer nbf = ByteBuffer.allocate((int) file.length())

            byte[] array = new byte[1024]

            int offset = 0, length = 0

            // 读存数据

            while((length = fin.read(array)) > 0){

                if(length != 1024) nbf.put(array,0,length)

                else nbf.put(array)

                offset += length

            }

            // 关闭文件

            fin.close()

            // 新建一个数组保存要写的内容

            byte[] content = nbf.array()

            String sql = "insert into images (bin_data) values (?) "

            PreparedStatement pstmt = conn.prepareStatement(sql)

            pstmt.setBytes(1,content)

            pstmt.execute()

            pstmt.close()

        }catch(Exception e){

            e.printStackTrace()

            return false

        }

        return true

    }

我把你的代码稍微改造了下,我这边是可以显示图片的。代码如下:

数据库 *** 作部分:

package com.database

import java.io.InputStream

import java.sql.*

/**

 * @作者 王建明

 * @创建日期 13-10-7

 * @创建时间 下午12:32

 * @版本号 V 1.0

 */

public class DataBaseUtil {

public static InputStream getImageStreamFromDataBase() {

Connection conn = null

try {

Class.forName("com.mysql.jdbc.Driver")

conn =

DriverManager.getConnection("jdbc:mysql://localhost/quickstart", "root", "123456")

Statement stmt = conn.createStatement()

String sql = "select book_image from tbl_book where id=1 "

ResultSet rs = stmt.executeQuery(sql)

if (rs.next()) {

return rs.getBinaryStream("book_image")

}

} catch (Exception e) {

System.out.println("出现异常: " + e.getMessage())

} finally {

try {

if (conn != null)

conn.close()

} catch (SQLException e) {

e.printStackTrace()

}

}

return null

}

}

servlet部分:

package com.servlet

import com.database.DataBaseUtil

import javax.servlet.ServletException

import javax.servlet.http.HttpServlet

import javax.servlet.http.HttpServletRequest

import javax.servlet.http.HttpServletResponse

import java.io.IOException

import java.io.InputStream

import java.io.OutputStream

/**

 * @作者 王建明

 * @创建日期 13-10-7

 * @创建时间 下午12:18

 * @版本号 V 1.0

 */

public class ShowImage extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doGet(request, response)

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

InputStream in = DataBaseUtil.getImageStreamFromDataBase()

OutputStream toClient = response.getOutputStream()

response.reset()

response.setContentType("image/jpg")//或gif

int len = 10*1024*1024

byte[] P_Buf = new byte[len]

int i

while((i = in.read(P_Buf)) != -1){

toClient.write(P_Buf, 0, i)

}

in.close()

toClient.flush()

toClient.close()

}

}

web.xml中的servlet配置:

    <servlet>

        <servlet-name>ShowImage</servlet-name>

        <servlet-class>com.servlet.ShowImage</servlet-class>

    </servlet>

    <servlet-mapping>

        <servlet-name>ShowImage</servlet-name>

        <url-pattern>/showImage</url-pattern>

    </servlet-mapping>

页面中加载图片方式:

<img src="showImage" />

希望对你有帮助O(∩_∩)O~

一般数据库只存图片的路径。你可以在web下建一个目录(images),然后把上传的图片放在里面。最好是用系统时间命名,避免冲突。

具体路径是通过request.getRealPath("images")得到,让后把图片改名放进去。

数据库记住相对的路径(1111.jpg)就可以了,在页面可以<img src="$contextPath/imags/1111.jpg" .../>


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10816432.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-11
下一篇2023-05-11

发表评论

登录后才能评论

评论列表(0条)

    保存