|
|
资讯缩略图:
资讯发布日期:2025-12-29
资讯发布简介:AIWROK手机数据库MySQL数据库截图片批量上传操作脚本
资讯关键词:AIWROK手机数据库MySQL数据库截图片批量上传操作脚本
资讯所属分类:IT资讯
联系:
① 本信息收集于网络,如有不对的地方欢迎联系我纠正! ② 本信息免费收录,不存在价格的问题! ③ 如果您的网站也想这样出现在这里,请您加好友情链接,我当天会审核通过!
④友情链接关键字:软件网站分类目录 网址:http://www.postbbs.com/
资讯详细描述
 | |  |  | AIWROK手机数据库MySQL数据库截图片批量上传操作 脚本
- //🍎交流QQ群711841924群一,苹果内测群,528816639
- // AIWROK软件数据库图片批量上传操作脚本
- // 实现读取本地图片、转换为Base64、上传到数据库、以及从数据库还原图片的功能
- print.log("===== 数据库图片上传操作脚本开始 =====");
- var conn = null;
- var pstmt = null;
- /**
- * Java原生方法:将文件转换为Base64字符串
- */
- function fileToBase64(filePath) {
- try {
- var file = new java.io.File(filePath);
- if (!file.exists()) {
- return null;
- }
-
- var fis = new java.io.FileInputStream(file);
- var buffer = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, 1024);
- var bytesRead = 0;
- var byteBuffer = [];
-
- while ((bytesRead = fis.read(buffer)) != -1) {
- for (var i = 0; i < bytesRead; i++) {
- byteBuffer.push(buffer[i]);
- }
- }
-
- fis.close();
-
- var bytes = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, byteBuffer.length);
- for (var i = 0; i < byteBuffer.length; i++) {
- bytes[i] = byteBuffer[i];
- }
-
- return android.util.Base64.encodeToString(bytes, android.util.Base64.NO_WRAP);
- } catch (e) {
- print.log("❌ 文件转Base64失败: " + e.message);
- return null;
- }
- }
- /**
- * Java原生方法:检查文件是否存在
- */
- function fileExists(filePath) {
- return new java.io.File(filePath).exists();
- }
- /**
- * Java原生方法:获取文件大小
- */
- function fileLength(filePath) {
- return new java.io.File(filePath).length();
- }
- /**
- * Java原生方法:获取文件名
- */
- function getFileName(filePath) {
- return new java.io.File(filePath).getName();
- }
- /**
- * 连接数据库
- */
- function connectDatabase() {
- try {
- var url = "jdbc:mysql://38.12.31.15:3306/dddfguu";
- var user = "dddfguu";
- var password = "rAXyhnNkiNsChJ8e";
- var params = "?useSSL=false&characterEncoding=utf8&connectTimeout=5000";
-
- print.log("正在连接数据库...");
- conn = mysql.getConnection(url, user, password);
- print.log("✅ 数据库连接成功");
- return true;
- } catch (e) {
- print.log("❌ 数据库连接失败: " + e.message);
- return false;
- }
- }
- /**
- * 创建图片存储表
- */
- function createImageTable() {
- try {
- var sql = "CREATE TABLE IF NOT EXISTS images (" +
- "id INT AUTO_INCREMENT PRIMARY KEY, " +
- "name VARCHAR(255) NOT NULL, " +
- "path VARCHAR(500), " +
- "image_data LONGBLOB, " +
- "file_size INT, " +
- "image_width INT, " +
- "image_height INT, " +
- "mime_type VARCHAR(50), " +
- "created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP" +
- ")";
-
- var stmt = conn.createStatement();
- stmt.execute(sql);
- stmt.close();
-
- print.log("✅ 图片存储表创建成功(或已存在)");
- return true;
- } catch (e) {
- print.log("❌ 创建图片表失败: " + e.message);
- return false;
- }
- }
- /**
- * 检查表是否存在并显示表结构
- */
- function checkTableStructure() {
- try {
- var sql = "SHOW TABLES LIKE 'images'";
- var stmt = conn.createStatement();
- var rs = stmt.executeQuery(sql);
-
- if (rs.next()) {
- print.log("✅ 表 images 已存在");
- rs.close();
- stmt.close();
-
- // 显示表结构
- sql = "DESCRIBE images";
- stmt = conn.createStatement();
- rs = stmt.executeQuery(sql);
-
- print.log("表 images 的字段结构:");
- while (rs.next()) {
- var columnName = rs.getString(1);
- var columnType = rs.getString(2);
- print.log(" - " + columnName + ": " + columnType);
- }
- rs.close();
- stmt.close();
- return true;
- } else {
- print.log("❌ 表 images 不存在,需要先创建表");
- rs.close();
- stmt.close();
- return false;
- }
- } catch (e) {
- print.log("❌ 检查表结构失败: " + e.message);
- return false;
- }
- }
- /**
- * 获取图片文件信息
- */
- function getImageInfo(imagePath) {
- try {
- if (!fileExists(imagePath)) {
- print.log("❌ 图片文件不存在: " + imagePath);
- return null;
- }
-
- var fileSize = fileLength(imagePath);
- var fileName = getFileName(imagePath);
- var extension = fileName.substring(fileName.lastIndexOf('.') + 1).toLowerCase();
-
- var mimeType = "image/jpeg";
- if (extension === "png") {
- mimeType = "image/png";
- } else if (extension === "gif") {
- mimeType = "image/gif";
- } else if (extension === "webp") {
- mimeType = "image/webp";
- }
-
- print.log("图片文件信息:");
- print.log(" 路径: " + imagePath);
- print.log(" 文件名: " + fileName);
- print.log(" 文件大小: " + (fileSize / 1024).toFixed(2) + " KB");
- print.log(" MIME类型: " + mimeType);
-
- return {
- path: imagePath,
- name: fileName,
- size: fileSize,
- mimeType: mimeType
- };
- } catch (e) {
- print.log("❌ 获取图片信息失败: " + e.message);
- return null;
- }
- }
- /**
- * 将本地图片上传到数据库
- * @param {String} imagePath - 图片本地路径
- * @param {String} imageName - 图片名称(可选,默认使用文件名)
- */
- function uploadImageToDatabase(imagePath, imageName) {
- try {
- var imageInfo = getImageInfo(imagePath);
- if (!imageInfo) {
- return false;
- }
-
- var name = imageName || imageInfo.name;
-
- // 将图片文件转换为Base64字符串
- print.log("正在将图片转换为Base64字符串...");
- var base64Data = fileToBase64(imagePath);
-
- if (!base64Data) {
- print.log("❌ 图片转Base64失败");
- return false;
- }
-
- print.log("✅ Base64字符串生成成功,长度: " + base64Data.length + " 字符");
-
- // 将Base64字符串转换为字节数组
- // 格式: "data:image/jpeg;base64,..." 需要去除前缀
- var base64Content = base64Data;
- var prefix = "data:" + imageInfo.mimeType + ";base64,";
- if (base64Data.indexOf(prefix) === 0) {
- base64Content = base64Data.substring(prefix.length);
- }
-
- // 使用预编译语句插入图片数据
- var sql = "INSERT INTO images (name, path, image_data, file_size, mime_type) VALUES (?, ?, ?, ?, ?)";
- pstmt = conn.prepareStatement(sql);
- pstmt.setString(1, name);
- pstmt.setString(2, imagePath);
-
- // 设置BLOB参数 - 使用setBytes方法
- var bytes = android.util.Base64.decode(base64Content, android.util.Base64.NO_WRAP);
- pstmt.setBytes(3, bytes);
-
- pstmt.setInt(4, imageInfo.size);
- pstmt.setString(5, imageInfo.mimeType);
-
- var rowsAffected = pstmt.executeUpdate();
- pstmt.close();
- pstmt = null;
-
- if (rowsAffected > 0) {
- print.log("✅ 图片 '" + name + "' 上传成功,影响行数: " + rowsAffected);
- return true;
- } else {
- print.log("❌ 图片上传失败,影响行数为0");
- return false;
- }
- } catch (e) {
- print.log("❌ 上传图片到数据库失败: " + e.message);
- if (pstmt) {
- try { pstmt.close(); } catch(err) {}
- pstmt = null;
- }
- return false;
- }
- }
- /**
- * 从数据库下载图片并保存到本地
- * @param {Number} imageId - 数据库中的图片ID
- * @param {String} outputPath - 保存路径
- */
- function downloadImageFromDatabase(imageId, outputPath) {
- try {
- var sql = "SELECT name, image_data, mime_type FROM images WHERE id = ?";
- pstmt = conn.prepareStatement(sql);
- pstmt.setInt(1, imageId);
-
- var rs = pstmt.executeQuery();
-
- if (rs.next()) {
- var name = rs.getString("name");
- var imageData = rs.getBytes("image_data");
- var mimeType = rs.getString("mime_type");
-
- // 将字节数组转换为Base64字符串
- var base64Content = android.util.Base64.encodeToString(imageData, android.util.Base64.NO_WRAP);
-
- // 添加Base64前缀
- var prefix = "data:" + mimeType + ";base64,";
- var base64WithPrefix = prefix + base64Content;
-
- // 使用 new image().readBase64() 和 save() 保存为文件
- var imageObj = new image();
- imageObj.readBase64(base64WithPrefix);
- imageObj.save(outputPath);
-
- print.log("✅ 图片下载成功: " + outputPath);
- print.log(" 图片名称: " + name);
- print.log(" MIME类型: " + mimeType);
- print.log(" 文件大小: " + (imageData.length / 1024).toFixed(2) + " KB");
-
- rs.close();
- pstmt.close();
- pstmt = null;
-
- return true;
- } else {
- print.log("❌ 未找到ID为 " + imageId + " 的图片");
- rs.close();
- pstmt.close();
- pstmt = null;
- return false;
- }
- } catch (e) {
- print.log("❌ 从数据库下载图片失败: " + e.message);
- if (pstmt) {
- try { pstmt.close(); } catch(err) {}
- pstmt = null;
- }
- return false;
- }
- }
- /**
- * 查询数据库中所有图片信息
- */
- function queryAllImages() {
- try {
- var sql = "SELECT id, name, path, file_size, mime_type, created_at FROM images ORDER BY id";
- var stmt = conn.createStatement();
- var rs = stmt.executeQuery(sql);
-
- print.log("数据库中的图片列表:");
- var count = 0;
-
- while (rs.next()) {
- count++;
- var id = rs.getInt("id");
- var name = rs.getString("name");
- var path = rs.getString("path");
- var fileSize = rs.getInt("file_size");
- var mimeType = rs.getString("mime_type");
- var createdAt = rs.getString("created_at");
-
- print.log(" [" + id + "] " + name);
- print.log(" 大小: " + (fileSize / 1024).toFixed(2) + " KB");
- print.log(" 类型: " + mimeType);
- print.log(" 创建时间: " + createdAt);
- }
-
- rs.close();
- stmt.close();
-
- if (count === 0) {
- print.log(" 数据库中没有图片记录");
- } else {
- print.log(" 共 " + count + " 张图片");
- }
-
- return true;
- } catch (e) {
- print.log("❌ 查询图片列表失败: " + e.message);
- return false;
- }
- }
- /**
- * 根据ID删除图片
- */
- function deleteImageFromDatabase(imageId) {
- try {
- var sql = "DELETE FROM images WHERE id = ?";
- pstmt = conn.prepareStatement(sql);
- pstmt.setInt(1, imageId);
-
- var rowsAffected = pstmt.executeUpdate();
- pstmt.close();
- pstmt = null;
-
- if (rowsAffected > 0) {
- print.log("✅ 成功删除ID为 " + imageId + " 的图片,影响行数: " + rowsAffected);
- return true;
- } else {
- print.log("❌ 未找到ID为 " + imageId + " 的图片");
- return false;
- }
- } catch (e) {
- print.log("❌ 删除图片失败: " + e.message);
- if (pstmt) {
- try { pstmt.close(); } catch(err) {}
- pstmt = null;
- }
- return false;
- }
- }
- /**
- * 实时截图并上传到数据库
- * @param {String} imageName - 图片名称(可选)
- * @returns {Boolean} 是否成功
- */
- function screenshotAndUpload(imageName) {
- try {
- print.log("\n===== 实时截图并上传 =====");
-
- // 1. 截图
- print.log("正在截取屏幕...");
- var screenshot = screen.screenShotFull();
-
- if (!screenshot) {
- print.log("❌ 截图失败");
- return false;
- }
-
- print.log("✅ 截图成功");
-
- // 2. 生成本地保存路径
- var timestamp = new java.util.Date().getTime();
- var localPath = "/sdcard/screenshot_" + timestamp + ".jpg";
-
- // 3. 保存到本地
- print.log("正在保存截图到本地: " + localPath);
- screenshot.save(localPath);
-
- if (!fileExists(localPath)) {
- print.log("❌ 本地保存失败");
- return false;
- }
-
- print.log("✅ 本地保存成功");
-
- // 4. 上传到数据库
- var name = imageName || "截图_" + timestamp;
- print.log("正在上传到数据库: " + name);
-
- var uploadResult = uploadImageToDatabase(localPath, name);
-
- if (uploadResult) {
- print.log("✅ 实时截图上传成功!");
- return true;
- } else {
- print.log("❌ 数据库上传失败,但本地图片已保存");
- return false;
- }
- } catch (e) {
- print.log("❌ 实时截图上传失败: " + e.message);
- return false;
- }
- }
- /**
- * 定时截图并上传(循环执行)
- * @param {Number} intervalSeconds - 间隔秒数
- * @param {Number} maxCount - 最大执行次数(0表示无限循环)
- */
- function autoScreenshotUpload(intervalSeconds, maxCount) {
- try {
- print.log("\n===== 启动定时截图上传 =====");
- print.log("间隔: " + intervalSeconds + " 秒");
- print.log("最大次数: " + (maxCount === 0 ? "无限" : maxCount));
-
- var count = 0;
-
- while (maxCount === 0 || count < maxCount) {
- count++;
- print.log("\n--- 第 " + count + " 次截图 ---");
-
- var result = screenshotAndUpload("定时截图_" + count);
-
- if (result) {
- print.log("✅ 第 " + count + " 次成功");
- } else {
- print.log("❌ 第 " + count + " 次失败");
- }
-
- // 等待间隔(不包括最后一次)
- if (maxCount === 0 || count < maxCount) {
- print.log("等待 " + intervalSeconds + " 秒后进行下一次截图...");
- sleep(intervalSeconds * 1000);
- }
- }
-
- print.log("\n===== 定时截图任务完成 =====");
- print.log("共执行 " + count + " 次截图上传");
- return true;
- } catch (e) {
- print.log("❌ 定时截图任务失败: " + e.message);
- return false;
- }
- }
- /**
- * 截图并获取Base64数据(不上传,用于预览等)
- * @returns {String} Base64字符串,失败返回null
- */
- function screenshotToBase64() {
- try {
- print.log("\n===== 截图并获取Base64 =====");
-
- // 1. 截图
- var screenshot = screen.screenShotFull();
- if (!screenshot) {
- print.log("❌ 截图失败");
- return null;
- }
-
- // 2. 转为Base64
- var base64Data = screenshot.toBase64();
-
- if (base64Data) {
- print.log("✅ Base64数据获取成功,长度: " + base64Data.length + " 字符");
- print.log(" 前缀: " + base64Data.substring(0, 50) + "...");
- return base64Data;
- } else {
- print.log("❌ Base64转换失败");
- return null;
- }
- } catch (e) {
- print.log("❌ 截图转Base64失败: " + e.message);
- return null;
- }
- }
- /**
- * 关闭数据库连接
- */
- function closeConnection() {
- try {
- if (pstmt != null) {
- pstmt.close();
- pstmt = null;
- }
- if (conn != null) {
- conn.close();
- }
- print.log("✅ 数据库连接已关闭");
- } catch (e) {
- print.log("❌ 关闭连接时出错: " + e.message);
- }
- }
- // 主程序执行流程
- try {
- // 1. 连接数据库
- if (!connectDatabase()) {
- throw new Error("数据库连接失败");
- }
-
- // 2. 检查表是否存在,不存在则创建
- if (!checkTableStructure()) {
- print.log("正在创建图片存储表...");
- if (!createImageTable()) {
- throw new Error("创建图片表失败");
- }
- }
-
- // ========== 方式1:上传本地已有图片 ==========
- print.log("\n===== 方式1:上传本地图片 =====");
-
- // 常见的手机图片路径示例
- var sampleImagePaths = [
- "/sdcard/DCIM/Camera/photo_001.jpg",
- "/sdcard/Pictures/Screenshots/screenshot_001.png",
- "/sdcard/Download/image_001.jpg"
- ];
-
- // 使用第一个存在的图片路径
- var uploadPath = null;
- for (var i = 0; i < sampleImagePaths.length; i++) {
- var testPath = sampleImagePaths[i];
- if (new java.io.File(testPath).exists()) {
- uploadPath = testPath;
- print.log("找到可用的测试图片: " + uploadPath);
- break;
- }
- }
-
- if (uploadPath) {
- // 上传找到的图片
- uploadImageToDatabase(uploadPath, "本地测试图片_" + new java.util.Date().getTime());
- } else {
- print.log("⚠️ 未找到测试图片,请确保以下路径有图片文件:");
- for (var j = 0; j < sampleImagePaths.length; j++) {
- print.log(" - " + sampleImagePaths[j]);
- }
- }
-
- // ========== 方式2:实时截图并上传 ==========
- print.log("\n===== 方式2:实时截图并上传 =====");
-
- // 立即截图并上传
- var screenshotResult = screenshotAndUpload("实时截图测试");
-
- // ========== 方式3:定时截图上传(可选) ==========
- // 如果需要定时截图,请取消注释以下代码:
- // autoScreenshotUpload(5, 3); // 每5秒截图一次,共3次
-
- // 4. 查询所有图片
- print.log("\n===== 查询数据库中的图片 =====");
- queryAllImages();
-
- // 5. 下载最新图片
- print.log("\n===== 从数据库下载最新图片 =====");
- // 查找最新的图片ID
- var latestImageId = 0;
- try {
- var sql = "SELECT MAX(id) as max_id FROM images";
- var stmt = conn.createStatement();
- var rs = stmt.executeQuery(sql);
- if (rs.next()) {
- latestImageId = rs.getInt("max_id");
- }
- rs.close();
- stmt.close();
-
- if (latestImageId > 0) {
- var downloadPath = "/sdcard/downloaded_image_" + latestImageId + ".jpg";
- downloadImageFromDatabase(latestImageId, downloadPath);
-
- // 6. 截图转Base64演示
- print.log("\n===== 截图转Base64演示 =====");
- var base64Data = screenshotToBase64();
- if (base64Data) {
- print.log("✅ Base64可用于H5界面显示、网络传输等");
- }
-
- // 7. 删除图片演示(取消注释可删除)
- // print.log("\n===== 删除图片演示 =====");
- // deleteImageFromDatabase(latestImageId);
- // print.log("已删除ID为 " + latestImageId + " 的图片");
- }
- } catch (e) {
- print.log("⚠️ 演示下载功能时出错: " + e.message);
- }
-
- // 8. 再次查询确认
- print.log("\n===== 最终图片列表 =====");
- queryAllImages();
-
- } catch (e) {
- print.log("❌ 程序执行过程中发生错误: " + e.message);
- } finally {
- // 确保连接被关闭
- closeConnection();
- }
- print.log("===== 数据库图片上传操作脚本结束 =====");
- /**
- * 💡 使用说明:
- *
- * 1. 图片存储原理:
- * - 使用 MySQL 的 LONGBLOB 类型存储二进制图片数据
- * - 将图片文件转为 Base64 字符串,再转为字节数组存入数据库
- *
- * 2. 上传流程:
- * - file.fileToBase64(path) → 获取图片Base64字符串
- * - android.util.Base64.decode() → Base64转字节数组
- * - prepareStatement.setBytes() → 存入数据库
- *
- * 3. 下载流程:
- * - rs.getBytes() → 从数据库读取字节数组
- * - android.util.Base64.encodeToString() → 字节数组转Base64
- * - file.base64ToFile() → 保存为图片文件
- *
- * 4. 适用场景:
- * - 用户头像存储
- * - 商品图片管理
- * - 截图自动备份
- * - 图片数据迁移
- */
复制代码
| |  | |  |
|
untoHID中文输入智能打字功能nextnocontent
|