Java 如何从MySQL读取和保存图像
我要做的是在MySQL表中插入一个图像,然后获取图像数据(保存为blob类型),并将其写入某个文件位置的文件中 到目前为止,我有以下代码从表中读取图像数据并将其作为图像文件写入:Java 如何从MySQL读取和保存图像,java,mysql,image,blob,Java,Mysql,Image,Blob,我要做的是在MySQL表中插入一个图像,然后获取图像数据(保存为blob类型),并将其写入某个文件位置的文件中 到目前为止,我有以下代码从表中读取图像数据并将其作为图像文件写入: package imageReadWrite; import dbConnection.testConnection; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import
package imageReadWrite;
import dbConnection.testConnection;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.*;
public class BlobImageReadWeite {
testConnection db = new testConnection();
public String GetImage() {
String result = "";
try {
db.connect();
System.out.println("this is for test connection");
String Banner_chk = "Select * from banner_file where image_name is not null and status='Active' order by upload_dt DESC LIMIT 1";
ResultSet rs_Banner_chk = db.execSQL(Banner_chk);
if (rs_Banner_chk.next()) {
System.out.println(rs_Banner_chk.getString("image_name"));
Blob blob = rs_Banner_chk.getBlob("image");
File image = new File("test.png");
FileOutputStream fos = new FileOutputStream(image);
byte[] buffer = new byte[1024];
// Get the binary stream of our BLOB data
InputStream is = rs_Banner_chk.getBinaryStream("image");
while (is.read(buffer) > 0) {
fos.write(buffer);
}
fos.close();
}
db.close();
} catch (Exception e) {
System.out.println(e);
}
return result;
}
public static void main(String[] args) {
BlobImageReadWeite obj1 = new BlobImageReadWeite();
obj1.GetImage();
}
}
问题是生成的图像文件未打开
我使用以下代码将图像插入数据库
package promocode;
import java.awt.Toolkit;
import java.io.*;
import java.util.*;
import java.util.Date;
import java.text.*;
import java.sql.*;
import java.util.Vector;
import javax.imageio.*;
import javax.swing.ImageIcon;
import java.awt.*;
import db.connection;
public class ImageReader {
connection db=new connection();
public String fileupload(String flname,String user,String promo_rad)throws IOException, SQLException,ParseException{
String line=null;
String line1 = null;
String fval = "";
String fval_temp = "";
String flog,fileflag;
String sqlst1 = "";
String sqlst2 = "";
String res = "false";
int er_count=0;
int cor_count=0;
String error_message="";
String chk1="";
String chk2="";
String chk3="";
String chk4="";
System.out.println("the path is"+flname);
System.out.println(promo_rad);
String filename1="";
filename1=flname.substring(flname.lastIndexOf("\\")+1) ;
System.out.println(filename1);
try {
Image img=Toolkit.getDefaultToolkit().getImage(flname);
ImageIcon icon=new ImageIcon(img);
int height=icon.getIconHeight();
int width=icon.getIconWidth();
System.out.println("the image height is "+height+" and the image width is "+width);
File file = new File(flname);
FileInputStream fs = new FileInputStream(file);
db.connect();
if(width == 260 && height == 187){
sqlst2="insert into banner_file (image_name,image, FileType,Status, userid,image_flag,upload_dt,height,width) values ('"+filename1+"','"+fs+"','jpg','Active','"+user+"','"+promo_rad+"',now(),'"+height+"','"+width+"')";
System.out.println(sqlst2);
db.updateSQL(sqlst2);
res="true";
}
}catch(Exception e){
System.out.println(e);
}
finally{
db.close();
}
return res;
}
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
ImageReader obj1=new ImageReader();
String fn = "C:\\Program Files\\Apache Software Foundation\\Tomcat 7.0\\webapps\\aircel-billpay\\online_images\\Ganesha13.jpg";
String result = obj1.fileupload(fn,"internalpromo","yes");
System.out.println(result);
}
}
尝试交换
InputStream is = rs_Banner_chk.getBinaryStream("image");
与
从
返回的值为.read(buffer)
表示读取的字节数,这可能不是buffer
的整个长度。您将忽略该返回值,并在每个循环迭代中写出buffer
的全部内容。如果检查文件的大小,可能会发现它大于数据库中二进制数据的大小
而不是文件和文件输出流,考虑使用java. NIO.Frfile包代替:
Path image = Paths.get("test.png");
Files.copy(rs_Banner_chk.getBinaryStream("image"), image);
不确定这是否是一个问题,但当读取的字节数小于buffersize时,将向文件写入零。我建议您使用
ByteBuffer
和FileChannel
,但您也可以通过记录读取的字节和使用另一种write
方法来解决此问题。您好,您如何处理您的博客对象,我认为您没有将从数据库获取的对象写入新的文件对象,即blog objectHi Brijesh我正在读取从数据库获取的输入流中的数据,并将其写入文件中。
Path image = Paths.get("test.png");
Files.copy(rs_Banner_chk.getBinaryStream("image"), image);