专栏首页一个会写诗的程序员的博客MySQL 直接存储图片并在 html 页面中展示,点击下载

MySQL 直接存储图片并在 html 页面中展示,点击下载

数据库实体类:

package com.easy.kotlin.picturecrawler.entity

import java.util.*
import javax.persistence.*

@Entity
@Table(indexes = arrayOf(
        Index(name = "idx_url", unique = true, columnList = "url"),
        Index(name = "idx_category", unique = false, columnList = "category")))
class Image {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    var id: Long = -1
    @Version
    var version: Int = 0

    @Column(length = 255, unique = true, nullable = false)
    var category: String = ""
    var isFavorite: Int = 0

    @Column(length = 255, unique = true, nullable = false)
    var url: String = ""

    var gmtCreated: Date = Date()
    var gmtModified: Date = Date()
    var isDeleted: Int = 0  //1 Yes 0 No
    var deletedDate: Date = Date()

    @Lob
    var imageBlob: ByteArray = byteArrayOf()
    /* 0-Baidu  1-Gank */
    var sourceType: Int = 0

    override fun toString(): String {
        return "Image(id=$id, version=$version, category='$category', isFavorite=$isFavorite, url='$url', gmtCreated=$gmtCreated, gmtModified=$gmtModified, isDeleted=$isDeleted, deletedDate=$deletedDate)"
    }
}
其中的 @Lob  var imageBlob: ByteArray = byteArrayOf() 这个字段存储图片的 Base64内容。

存库代码

                val Image = Image()
                Image.category = "干货集中营福利"
                Image.url = url
                Image.sourceType = 1
                Image.imageBlob = getByteArray(url)
                logger.info("Image = ${Image}")
                imageRepository.save(Image)

其中的getByteArray(url) 函数:

    private fun getByteArray(url: String): ByteArray {
        val urlObj = URL(url)
        return urlObj.readBytes()
    }

前端 html 展示图片代码:

{
        title: '图片',
        field: 'imageBlob',
        align: 'center',
        valign: 'middle',
        formatter: function (value, row, index) {
            // var html = "<img onclick=downloadImage('" + value + "') width='100%' src='" + value + "'>"
            var html = '<img onclick="downBase64Image(this.src)" width="100%" src="data:image/jpg;base64,' + value + '"/>'
            return html
        }
    }

点击下载 js :

function downloadImage(src) {
    var $a = $("<a></a>").attr("href", src).attr("download", "sotu.png");
    $a[0].click();
}


function downBase64Image(url) {
    var blob = base64Img2Blob(url);
    url = window.URL.createObjectURL(blob);
    var $a = $("<a></a>").attr("href", url).attr("download", "sotu.png");
    $a[0].click();
}


function base64Img2Blob(code) {
    var parts = code.split(';base64,');
    var contentType = parts[0].split(':')[1];
    var raw = window.atob(parts[1]);
    var rawLength = raw.length;

    var uInt8Array = new Uint8Array(rawLength);

    for (var i = 0; i < rawLength; ++i) {
        uInt8Array[i] = raw.charCodeAt(i);
    }

    return new Blob([uInt8Array], {type: contentType});
}

或者:

function downloadFile(fileName, content) {
    var aLink = document.createElement('a');
    var blob = base64Img2Blob(content); //new Blob([content]);
    var evt = document.createEvent("HTMLEvents");
    evt.initEvent("click", false, false);//initEvent 不加后两个参数在FF下会报错
    aLink.download = fileName;
    aLink.href = URL.createObjectURL(blob);
    aLink.dispatchEvent(evt);
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 第13章 Kotlin 集成 SpringBoot 服务端开发(2)

    其中,ON DUPLICATE KEY UPDATE 这句表明当遇到重复的键值的时候,执行更新 gmt_modified = now() 的操作。这里nativ...

    一个会写诗的程序员
  • 《Kotlin 反应式编程》使用 RxKotlin 实现一个极简的 http DSL ( Reactive Programming Using Rx Kotlin )《Kotlin 反应式编程》使用

    我们现在已经基本知道 Kotlin 中 DSL 的样子了。但是这些 DSL 都是怎样实现的呢?本节我们就通过实现一个极简的http DSL来学习创建 DSL 背...

    一个会写诗的程序员
  • [Java 8 HashMap 详解系列] 1.HashMap 的存储数据结构

    从底层数据结构来说,HashMap是通过数组+链表+红黑树来进行数据存储的,数组是为了通过通过下标直接定位到数据,链表和红黑树都是为了解决冲突而引入的,红黑树是...

    一个会写诗的程序员
  • tasker调用钉钉机器人实现短信转钉钉 By HKL,

    tasker可以通过javascriptlet方法调用钉钉群聊机器人api接口可以实现短信转钉钉

    hiplon
  • js中获取时间new date()的用法 原

    得到的结果:1280977330000 注意:这里得到的结果将后三位(毫秒)转换成了000显示,使用时可能会出现问题。例如动态添加页面元素id的时候,不建议使用...

    山河木马
  • SAP ADBC和JDBC的对比

    https://blogs.sap.com/2017/05/08/adbc-and-jdbc/

    Jerry Wang
  • Go教程:03-数据类型

    Go 语言数据类型包含基础类型和复合类型两大类. 基础数据类型包括:布尔型、整型、浮点型、复数型、字符型、字符串型、错误类型. 复合数据类型包括:指针、数组、切...

    mojocn
  • 热词搜索_针对关键词的样式实现步骤

    wfaceboss
  • JavaScript逗号操作符

    今天在CSDN看到一篇文章http://www.csdn.net/article/2014-01-06/2818025-Useful-JavaScript-Ti...

    寒月十八
  • Python 趣味练习- 修改图片

    https://github.com/Yixiaohan/show-me-the-code

    py3study

扫码关注云+社区

领取腾讯云代金券