精华内容
下载资源
问答
  • 把数据库里img这个里面图片路径运用到JSP的标签上, 目前img里的是image/malatang.jpg , image是当前项目的图片夹, 完全小白自学中,希望大家能给出详细的修改的代码,谢谢大家! ``` ; charset=UTF-...
  • 图片存mysql

    2019-05-30 11:03:42
    https://www.cnblogs.com/wangtao_20/p/3440570.html https://www.cnblogs.com/hushaojun/p/6223536.html https://www.jb51.net/article/44206.htm
    展开全文
  • java存图片mysql数据库

    千次阅读 2017-12-06 11:25:16
    我们使用mysql数据库的时候基本上都是存字段,很少用到存入图片的,那么如果我们想存图片在我们的数据库中该如何去解决呢? 其实我们的图片存入数据库是以二进制的形式存在数据库里面的,那么我们来看看我们的图片...

    我们使用mysql数据库的时候基本上都是存字段,很少用到存入图片的,那么如果我们想存图片在我们的数据库中该如何去解决呢?

    其实我们的图片存入数据库是以二进制的形式存在数据库里面的,那么我们来看看我们的图片是如何保存并读取的吧

    注:本文来自转载路径

    数据库:

    CREATE TABLE photo (
        id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(100) COMMENT '名称',
        photo blob COMMENT '照片'
    )

    类DBUtil

    /**
     * Created by yuehailin on 2017/12/6.
     */
    /**
     *
     */
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    
    
    public class DBUtil {
        // 定义数据库连接参数
        public static final String DRIVER_CLASS_NAME = "com.mysql.jdbc.Driver";
        public static final String URL = "jdbc:mysql://localhost:3306/test";
        public static final String USERNAME = "root";
        public static final String PASSWORD = "123";
    
        // 注册数据库驱动
        static {
            try {
                Class.forName(DRIVER_CLASS_NAME);
            } catch (ClassNotFoundException e) {
                System.out.println("注册失败!");
                e.printStackTrace();
            }
        }
    
        // 获取连接
        public static Connection getConn() throws SQLException {
            return DriverManager.getConnection(URL, USERNAME, PASSWORD);
        }
    
        // 关闭连接
        public static void closeConn(Connection conn) {
            if (null != conn) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    System.out.println("关闭连接失败!");
                    e.printStackTrace();
                }
            }
        }
        //测试
        public static void main(String[] args) throws SQLException {
            System.out.println(DBUtil.getConn());
        }
    
    }
    类ImageDemo
    /**
     * Created by yuehailin on 2017/12/6.
     */
    /**
     *
     */
    
    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    public class ImageDemo {
    
        // 将图片插入数据库
        public static void readImage2DB() {
            String path = "D:/1.PNG";
            Connection conn = null;
            PreparedStatement ps = null;
            FileInputStream in = null;
            try {
                in = ImageUtil.readImage(path);
                conn = DBUtil.getConn();
                String sql = "insert into photo (id,name,photo)values(?,?,?)";
                ps = conn.prepareStatement(sql);
                ps.setInt(1, 1);
                ps.setString(2, "Tom");
                ps.setBinaryStream(3, in, in.available());
                int count = ps.executeUpdate();
                if (count > 0) {
                    System.out.println("插入成功!");
                } else {
                    System.out.println("插入失败!");
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                DBUtil.closeConn(conn);
                if (null != ps) {
                    try {
                        ps.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
    
        }
    
        // 读取数据库中图片
        public static void readDB2Image() {
            String targetPath = "D:/image/1.png";
            Connection conn = null;
            PreparedStatement ps = null;
            ResultSet rs = null;
            try {
                conn = DBUtil.getConn();
                String sql = "select * from photo where id =?";
                ps = conn.prepareStatement(sql);
                ps.setInt(1, 1);
                rs = ps.executeQuery();
                while (rs.next()) {
                    InputStream in = rs.getBinaryStream("photo");
                    ImageUtil.readBin2Image(in, targetPath);
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                DBUtil.closeConn(conn);
                if (rs != null) {
                    try {
                        rs.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                if (ps != null) {
                    try {
                        ps.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
    
            }
        }
        //测试
        public static void main(String[] args) {
           // readImage2DB();
            readDB2Image();
        }
    }
    
    类ImageUtil

    /**
     * Created by yuehailin on 2017/12/6.
     */
    /**
     *
     */
    
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    
    public class ImageUtil {
    
        // 读取本地图片获取输入流
        public static FileInputStream readImage(String path) throws IOException {
            return new FileInputStream(new File(path));
        }
    
        // 读取表中图片获取输出流
        public static void readBin2Image(InputStream in, String targetPath) {
            File file = new File(targetPath);
            String path = targetPath.substring(0, targetPath.lastIndexOf("/"));
            if (!file.exists()) {
                new File(path).mkdir();
            }
            FileOutputStream fos = null;
            try {
                fos = new FileOutputStream(file);
                int len = 0;
                byte[] buf = new byte[1024];
                while ((len = in.read(buf)) != -1) {
                    fos.write(buf, 0, len);
                }
                fos.flush();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (null != fos) {
                    try {
                        fos.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    说明:

    1.连接数据库的时候一定要记得导入jar包
    2.数据库的相关配置需要设置好

    3.需要从本地文件读取一张图片,存入数据库

    4.然后从数据库中读取刚刚存入的照片,再存到一个新的目录中




    展开全文
  • 想问一下MySQL里面图片的Varchar型地址,为什么读出来是图片,用的什么方法或者逻辑是什么?
  • 本人长期出售超大量微博数据...  由于硬件等各种原因需要把大概170多万2t左右的微博图片数据Mysql中.之前微博数据一直用的非关系型数据库mongodb,由于对Mysql的各种不熟悉,踩了无数坑,来来回回改了3天才...

    本人长期出售超大量微博数据、旅游网站评论数据,并提供各种指定数据爬取服务,Message to YuboonaZhang@Yahoo.com。同时欢迎加入社交媒体数据交流群:99918768

    前言

      由于硬件等各种原因需要把大概170多万2t左右的微博图片数据存到Mysql中.之前存微博数据一直用的非关系型数据库mongodb,由于对Mysql的各种不熟悉,踩了无数坑,来来回回改了3天才完成。

    挖坑填坑之旅

    建表

    存数据的时候首先需要设计数据库,我准备设计了3个表

    微博表:[id, userid, blog_text, lat, lng, created_time, reserve]   pkey: id

    图片表:[md5, pic_url, pic_bin, exif, reserve]   pkey: md5

    关系表:[id, md5, reserve]   pkey: (id, md5)   fkey: (id, 微博表id)  (md5, 图片表md5)

      建表的时候别的问题都还好,主要是 pic_bin 的类型和 blog_text 的类型有很大的问题,首先是pic_bin的类型,开始设置的为BLOB,但是运行之后发现BLOB最大只能存1M的数据,并不能满足微博图片的存储,后改成MEDIUMBLOB(16M)基本能够满足要求了。再后来就是blog_text,我遇到的第一个大坑

      开始的时候很自然的设置blog_text的类型为TEXT,但跑起来发现有些数据存不进去,会报错,经筛查发现是有些微博文本中包含了emoji表情…随后找了很多资料发现是因为utf8下文字是三字节,但是emoji是四字节,需要将编码改成utf8mb4。然而我在mac上整mysql的配置文件报各种奇葩错误,一怒之下把TEXT改成了BLOB,就好了。因为本地是MAC,我要连接到远程的一台Windows上才能通过那个Windows连接到群晖的Mysql上…本地配置改了也白改。

    存图片

      然后这就是一个大坑!!! 由于我使用的python3,所以读取图片得到的二进制的结果前面会有一个b’, 表示bytes,正是由于这个b’导致sql语句拼接的时候这个b后面的单引号会和sql语句的引号结合,导致后面的二进制没有在引号里面出错!二进制编码又不像string可以对字符转义,试了好多方法都不行!最后没有办法使用base64 对二进制进行加密转化成字符串,存到数据库中,然后要用时的时候再解密。

    pic_bin = str(base64.b64encode(pic_bin))[2:-1]

    改配置文件

      由于使用Python多进程,一个小时8G数据量,图片数据比较大,发包的时候回超过mysql的默认限制,出现Mysql server has gone away, 这个时候要改配置文件,在配置文件中参数

    max_allowed_packet = 600M
    wait_timeout = 60000

    Lost connection to Mysql server during query

      程序跑着跑着总会出现这个错误,一直找原因,试了各种办法看了好多资料,一直都是错误。实在不知道什么原因了…后来一想,我管他什么原因,失去连接之后重新连接就行了。使用conn.Ping(True) 判断是否连接mysql成功。如果失去连接就重新连接就行了!最后解决了这个问题

    代码实现

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # Created by Baoyi on 2017/10/16
    from multiprocessing.pool import Pool
    
    import pymysql
    import requests
    import json
    import exifread
    from io import BytesIO
    import configparser
    import hashlib
    import logging
    import base64
    
    # 配置logging
    logging.basicConfig(level=logging.WARNING,
                        format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                        datefmt='%a, %d %b %Y %H:%M:%S',
                        filename='weibo.log',
                        filemode='w')
    
    cf = configparser.ConfigParser()
    cf.read("ConfigParser.conf")
    
    # 读取配置mysql
    db_host = cf.get("mysql", "db_host")
    db_port = cf.getint("mysql", "db_port")
    db_user = cf.get("mysql", "db_user")
    db_pass = cf.get("mysql", "db_pass")
    db = cf.get("mysql", "db")
    
    # 创建连接
    conn = pymysql.connect(host=db_host, user=db_user, passwd=db_pass, db=db, port=db_port, charset='utf8')
    # 获取游标
    cursor = conn.cursor()
    
    # 创建insert_sql
    insert_blog_sql = (
        "INSERT IGNORE INTO blog(userid, id, blog_text, lat, lng, created_time) VALUES('{uid}', '{id}','{blog_text}','{lat}','{lng}','{created_time}')"
    )
    
    insert_pic_sql = (
        "INSERT IGNORE INTO pics(pic_url, pic_bin, md5, exif) VALUES ('{pic_url}','{pic_bin}','{md5}','{exif}')"
    )
    
    insert_relationship_sql = (
        "INSERT IGNORE INTO relationship(id, md5) VALUES ('{id}','{md5}')"
    )
    
    uid = []
    
    with open('./data/final_id.txt', 'r') as f:
        for i in f.readlines():
            uid.append(i.strip('\r\n'))
    
    
    # 处理图片数据
    def handle_pic(pic_url):
        large_pic_url = pic_url.replace('thumbnail', 'large')
        large_bin = requests.get(large_pic_url)
        return large_bin.content
    
    
    def get_poiid_info(uid):
        try:
            url = 'https://api.weibo.com/2/statuses/user_timeline.json'
            load = {
                'access_token': 'xxxxxxxxxx',
                'uid': uid,
                'count': 100,
                'feature': 2,
                'trim_user': 1
            }
            get_info = requests.get(url=url, params=load, timeout=(10, 10))
            if get_info.status_code != 200:
                logging.warning(ConnectionError)
                pass
            info_json = json.loads(get_info.content)
            info_json['uid'] = uid
            statuses = info_json['statuses']
            # 处理筛选微博数据
            for status in statuses:
                id = status['idstr']
                if status['geo'] is not None:
                    lat = status['geo']['coordinates'][0]
                    lng = status['geo']['coordinates'][1]
                    pic_urls = status['pic_urls']
    
                    # 判断是否在北京
                    if (115.7 < lng < 117.4) and (39.4 < lat < 41.6):
                        # 若在北京,插入blog数据进库
                        blog_text = status['text'].replace('\'', '\'\'')
                        created_time = status['created_at']
                        try:
                            cursor.execute(
                                insert_blog_sql.format(uid=uid, id=id, blog_text=blog_text, lat=lat, lng=lng,
                                                       created_time=created_time))
                        except pymysql.err.OperationalError as e_blog:
                            logging.warning(e_blog.args[1])
                            pass
    
                        # conn.commit()
                        # 处理图片
                        for pic_url in pic_urls:
                            # 获取原图片二进制数据
                            pic_bin = handle_pic(pic_url['thumbnail_pic'])
    
                            # 读取exif 数据
                            pic_file = BytesIO(pic_bin)  # 将二进制数据转化成文件对象便于读取exif数据信息和生成MD5
                            tag1 = exifread.process_file(pic_file, details=False, strict=True)
                            tag = {}
                            for key, value in tag1.items():
                                if key not in (
                                        'JPEGThumbnail', 'TIFFThumbnail', 'Filename',
                                        'EXIF MakerNote'):  # 去除四个不必要的exif属性,简化信息量
                                    tag[key] = str(value)
                            tags = json.dumps(tag)  # dumps为json类型 此tag即为exif的json数据
                            # 生成MD5
                            MD5 = hashlib.md5(pic_file.read()).hexdigest()
                            # 首先把二进制图片用base64 转成字符串之后再存
                            try:
                                cursor.execute(
                                    insert_pic_sql.format(pic_url=pic_url['thumbnail_pic'].replace('thumbnail', 'large'),
                                                          pic_bin=str(base64.b64encode(pic_bin))[2:-1], md5=MD5,
                                                          exif=tags))
                            except pymysql.err.OperationalError as e_pic:
                                logging.warning(e_pic.args[1])
                                pass
                            try:
                                cursor.execute(insert_relationship_sql.format(id=id, md5=MD5))
                            except pymysql.err.OperationalError as e_relation:
                                logging.warning(e_relation)
                                pass
                            conn.commit()
    
                    else:
                        logging.info(id + " is Not in Beijing")
                        pass
                else:
                    logging.info(id + ' Geo is null')
                    pass
        except pymysql.err.OperationalError as e:
            logging.error(e.args[1])
            pass
    
    
    def judge_conn(i):
        global conn
        try:
            conn.ping(True)
            get_poiid_info(i)
        except pymysql.err.OperationalError as e:
            logging.error('Reconnect')
            conn = pymysql.connect(host=db_host, user=db_user, passwd=db_pass, db=db, charset='utf8')
            get_poiid_info(i)
    
    
    def handle_tuple(a_tuple):
        read_uid_set = []
        for i in a_tuple:
            read_uid_set.append(i[0])
        return set(read_uid_set)
    
    
    if __name__ == '__main__':
        sql_find_uid = (
            "SELECT userid FROM blog"
        )
        cursor.execute(sql_find_uid)
        read_uid_tuple = cursor.fetchall()
        read_list = handle_tuple(read_uid_tuple)
        print(len(read_list))
    
        new_uid = set(uid).difference(read_list)
        print(len(new_uid))
    
        pool = Pool()
        pool.map(judge_conn, list(new_uid))

    个人博客

    8aoy1.cn

    展开全文
  • 直接存图片mysql上面有两点好处: 1.比较容易做取重,就是相同的图片只存一份. 2.最重要备份使用数据库的备份方式简单. 3.容易管理,去掉无用的图片等. 缺点: 1.不适合超大量存储,数据的存储越大,恢复越麻烦 2.当然...

     

    https://developer.aliyun.com/ask/80505?spm=a2c6h.13159736

     

    直接存图片在mysql上面有两点好处:
    1.比较容易做取重,就是相同的图片只存一份.
    2.最重要备份使用数据库的备份方式简单.
    3.容易管理,去掉无用的图片等.
    缺点:
    1.不适合超大量存储,数据的存储越大,恢复越麻烦
    2.当然一般还是需要前端做更多的物理缓存,而不是靠mysql来直接输出.

    https://zhidao.baidu.com/question/368148259207972684.html

    1.图片直接存进数据库字段选择longblob类型,这样存进去的是二进制码

    2.存路径和图片名 你把路径保存到mysql数据表中,图片放在一个文件夹中就行,这个表,如果没有其他的字段,那你就设置两个就行,id(主键),imgpath(图片路径),当然名称你自己定

     

    展开全文
  • 这个问题困扰了我好几天,从网上查到的资料程序确实没有错,但是我的存储图片确实出现了问题。但是我存储一个大个的文本文件确没有有报错。...我将mysql文件加下一个my.ini文件中的gbk全部替换成utf8,有重启动了一下
  • JDBC存图片与取出图片

    千次阅读 2016-12-09 16:27:21
    mysql存图片可用Blob对象表示图片,将Blob插入到数据库时 利用PrepareStatement对象的setBinaryStream方法,实现将Blob数据保存到数据库中mysql取图片(写出到文件夹)调用查询结构集的getBlob方法,获取数据库里的...
  • String username = (String)parser.assertKey(mysqlConfig, "username", "database." + dbAlias); String password = (String)parser.assertKey(mysqlConfig, "password", "database." + dbAlias); return ...
  • 图片路径一定不能相对路径,一定要绝对路径。对应的图片文件目录为:
  • Navicat for MySQL存emoji表情

    千次阅读 2019-04-15 21:17:17
    修改mysql配置文件my.ini(mysql安装目录下) 添加以下内容 [client] default-character-set=utf8mb4 [mysqld] character-set-client-handshake = FALSE character-set-server = utf8...
  • Java程序向MySQL存放图片

    热门讨论 2020-10-11 14:04:47
    Java MySQL存放图片 环境 IDEA JDK 11 8.0.11 MySQL Community Server mysql-connector-java-8.0.21.jar 导入JAR包 MySQL官网下载页面 实现代码 MySQL类 连接MySQL数据库,其中<host name>为MySQL数据库公网...
  • 现在MySQL的字符编码使用最多的是utf8,但是此utf8最多只能3字节字符,如果遇到像emoji这种四字节字符就无能为力了,保存的时候就会抛出异常:Caused by: java.sql.SQLException: Incorrect string value: '\xF0\...
  • java web项目中如何将上传图片的路径mysql?希望有实际代码例子,感谢!
  • MySQL存放图片 环境 Python 3.7.4 pymysql 8.0.11 MySQL Community Server 实现代码 import pymysql class Database(): ''' Description: database demo to store image in MySQL RDBMS Attributes: ...
  • PHP与mysql显示图片

    千次阅读 2011-11-08 16:55:43
    mysql: 建库; mysql>create database test; mysql>use test; 建表: mysql>create table img(  img longblob ...mysql>insert into img values('d:\a.jpg');...数据库中最好存图片地址 或者 mysql>in
  • 首先,判断mysql数据库的所有编码格式:(统一以utf-8格式举例) 进入自建库: use 库名; 查看自建库的编码: show variables like '%char%'; 结果如下:(我是之前改过的) 修改图片中的红框编码: ...
  • 在web开发中,除了往数据库中存取文字信息外,还经常存取图片信息,今天我们就自己动手实现以下如何使用Mysql在jsp与servlet中存取图片信息。 首先看jsp,在jsp中首先添加一个按钮,按钮点击后将硬盘上指定的一张...
  • mysql保存图片和读取图片

    千次阅读 2019-04-12 00:00:34
    基于字节流和sql的图片存储和读取操作 DbUtil package cn.edu.zzti.photo; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; /** * @Classname DBUtil * @Author ...
  • MySQL 5.1.30 数据库连接池:druid Maven 3.5.9 项目pom文件: &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;project xmlns="http://maven.apache.or...
  • :在进行上传图片时,为了防止图片名重复先使用时间戳对图片名进行重命名,然后再把图片放在Web项目路径下,最后把图片的路径存放在数据库中。 取:从数据库中取出相应的图片路径,回显到前端页面 工具: IDEA ...
  • mysql jsp 图片

    千次阅读 2008-12-02 13:45:00
    我在程序代码里贴了向Mysql数据库写入image代码的程序,可是好多人都是Java的初学者,对于这段代码,他们无法将它转换成jsp,所以我在这在写一下用jsp怎样向数据库写入图像文件。大家先在数据库建这样一张表,我下面...
  • Java实现MySQL图片存取

    千次阅读 2017-07-15 22:18:37
    Java实现MySQL图片存取
  • mysql存一些试验表格,怎么设计数据库表比较合理? 我想到的方法: 1:是一个格子当成一个字段 2:分表,例如绝缘电阻成为一个表,然后一个相位为一条数据,包含6个字段 表格里的部分如下: ![图片说明]...
  • 关于mysql数据库图片存放的问题

    千次阅读 2017-11-06 16:02:58
    最近做一个项目,图片管理系统,客户说要把图片数据放到数据库中去,不是存图片地址, 因为以后实际应用中,每张图片容易都会在5-10M之间,现在测试的时候,添加1000张图片,就导致执行update 或者 select等语句...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,953
精华内容 12,381
关键字:

mysql存图片

mysql 订阅