java - 如何将字符串形式的图像(从android捕获并使用arraylist传递)转换为blob并将其保存在mysql数据库中

标签 java android mysql image base64

我已经从android捕获图像并使用字符串形式的arraylist将其传递到数据库端。 现在的问题是如何将此字符串转换为 BLOB 并使用 servlet 将其保存在数据库中。

谢谢大家的帮助

这是安卓代码: 新线程(新可运行(){

                @Override
                public void run() {
                    // TODO Auto-generated method stub

                    ArrayList<NameValuePair> postparameters=new ArrayList<NameValuePair>();
                    postparameters.add(new BasicNameValuePair("profile",image.toString()));

                    String response=null;
                    try{
                        response=RegisterHttpReq.executeHttpPost("http://10.0.2.2:8080/epass_admin/storeImage", postparameters);
                        String res = response.toString();
                        System.out.println(res);
                        String resp = res.replaceAll("\\s+", "");
                    }catch(Exception e){}
                }
            }).start();

             try{
                Toast.makeText(getApplicationContext(), "Image uploaded successfully", Toast.LENGTH_LONG).show();

                Intent in=new Intent(getApplicationContext(),Imageset.class);
                image=imv.getDrawingCache();

                 Bundle extras = new Bundle();
                 extras.putParcelable("imagebitmap", image);
                 in.putExtras(extras);
                 startActivity(in);
             }catch(Exception e){}
        }
    });

最佳答案

根据维基百科,“二进制大型对象 (BLOB) 是作为单个实体存储在数据库管理系统中的二进制数据的集合。Blob 通常是图像、音频或其他多媒体对象”。这并不排除在 BLOB 字段中存储纯文本的可能性。 也就是说,我不确定 toString() 是否会将您的图像转换为字符串。您应该将图像转换为 Base64,然后再从 Base64 返回为二进制。请参阅Java - Convert image to Base64 。 取回二进制数据后,您可以将其插入数据库。您还可以存储经过 Base64 编码的图像,并仅在检索时对其进行解码。不过,这通常会消耗 30% 的额外空间。

插入图像 BLOB 数据的代码 ( http://www.java2s.com/Code/Java/Database-SQL-JDBC/InsertpicturetoMySQL.htm ):

/*

Defining the Table: Oracle and MySql

create table MyPictures (
   id INT PRIMARY KEY,
   name VARCHAR(0),
   photo BLOB
);
*/
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class InsertPictureToMySql {
  public static void main(String[] args) throws Exception, IOException, SQLException {
    Class.forName("org.gjt.mm.mysql.Driver");
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/databaseName", "root", "root");
    String INSERT_PICTURE = "insert into MyPictures(id, name, photo) values (?, ?, ?)";

    FileInputStream fis = null;
    PreparedStatement ps = null;
    try {
      conn.setAutoCommit(false);
      File file = new File("myPhoto.png");
      fis = new FileInputStream(file);
      ps = conn.prepareStatement(INSERT_PICTURE);
      ps.setString(1, "001");
      ps.setString(2, "name");
      ps.setBinaryStream(3, fis, (int) file.length());
      ps.executeUpdate();
      conn.commit();
    } finally {
      ps.close();
      fis.close();
    }
  }
}

关于java - 如何将字符串形式的图像(从android捕获并使用arraylist传递)转换为blob并将其保存在mysql数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28523855/

相关文章:

php - 如何检查数据库中是否存在多个字符串?

java - 如何使用分隔字符串 "#|#"分割字符串

java - java protected 构造函数是什么意思

java - 打印前 N 个素数

android - Lokhttp3/internal/Util 类中没有静态方法 delimiterOffset

Android Studio 4.1 ANDROID_AAPT_IGNORE

mysql - 如何在 MySQL 中仅当所选列中有值时才使用 Select 进行插入?

java - 使用放心的java对不同的请求主体进行数据驱动测试的最佳方法

android - 如何使用改造将成功的响应主体转换为特定类型?

mysql - 如果行为零,如何运行替代条件