通过java或jsp想数据库存取二进制图片(精)

合集下载

使用Java操作二进制文件

使用Java操作二进制文件

使用java操作二进制文件在从File类开始IO系统介绍一文中,我们详细的介绍了File类。

这个类非常有用,我们可以用它作桥梁把文件和流轻松的联系起来。

在Java IO专题中,我准备先介绍一些实用的关于Java IO编程方法,而不是先从整体来把握IO,因为我觉得那样效果并不好。

当我们解决了这些平时开发中涉及到的问题后,再总结一下Java的IO系统。

当我们要对文件进行操作的时候,我们首先要确定我们对什么样的文件进行操作,是二进制的文件例如图片还是字符类型的文本文件,这非常的重要。

当我们对二进制的文件处理的时候,我们应该使用FileInputStream和FileOutputStream,对文本文件的处理将在后面的文章讲述。

当我们操作文件的时候,可以首先使用File类得到对这个文件的引用,例如File file = new File("Idea.jpg");然后把file作为参数传给FileInputStream或者FileOutputStream得到相应的输入流或者输出流。

通常我们对文件无非是进行读写,修改,删除等操作。

最重要的就是读写操作。

当我们读文件的时候应该使用InputStream,写文件的时候使用OutputStream。

read()方法是在InputStream中定义的,它是个抽象方法。

InputStream当然也是个抽象类,我们得到的实例都是它的子类,例如FileInputStream,子类如果不是抽象类的话就要实现父类的抽象方法。

在FileInputStream中不但实现了read()并且重载了这个方法提供了read(byte[] buffer)和read(byte[] buffer,int off,int length)两个方法。

下面详细介绍一下:read()方法将读取输入流中的下一个字节,并把它作为返回值。

返回值在0-255之间,如果返回为-1那么表示到了文件结尾。

java 2进制 8进制 16进制的表示方法

java 2进制 8进制 16进制的表示方法

java 2进制 8进制 16进制的表示方法Java中,表示二进制、八进制和十六进制的方法主要有以下几种:1.二进制表示法:二进制是以0b或0B开头的,后面跟着一串由0和1组成的数字序列。

二进制表示法在Java SE 7以后开始支持。

例如,使用二进制表示整数42和负数-42的方式如下所示:int num1 = 0b101010; //表示十进制的42int num2 = -0b101010; //表示十进制的-42需要注意的是,Java中的整型字面量默认是十进制的,如果需要使用其他进制的整数,需要使用前缀来指定。

1.八进制表示法:八进制是以0开头的,后面跟着一串由0~7组成的数字序列。

八进制的表示法在Java中可以通过使用前缀0来实现。

例如,使用八进制表示整数42和负数-42的方式如下所示:int num1 = 052; //表示十进制的42int num2 = -052; //表示十进制的-421.十六进制表示法:十六进制是以0x或0X开头的,后面跟着一串由0~9和A~F(不区分大小写)组成的数字和字母序列。

十六进制的表示法在Java中比较常用。

例如,使用十六进制表示整数42和负数-42的方式如下所示:int num1 = 0x2A; //表示十进制的42int num2 = -0x2A; //表示十进制的-42需要注意的是,十六进制中的字母部分可以是大写的A~F,也可以是小写的a~f。

除了整数以外,浮点数、字符和字符串也可以使用二进制、八进制和十六进制的表示法:1.二进制浮点数表示法:二进制浮点数是以0b或0B开头的,后面跟着一串由0和1组成的数字序列,并且使用科学计数法表示。

例如,使用二进制表示小数0.75的方式如下所示:double num = 0b0.11; //表示十进制的0.75需要注意的是,浮点数的表示法可以使用小写的b,也可以使用大写的B。

1.八进制浮点数表示法:八进制浮点数是以0.开头的,后面跟着一串由0~7组成的数字序列,并且使用科学计数法表示。

C#将图片以二进制保存,读取二进制转换图片

C#将图片以二进制保存,读取二进制转换图片

C#将图⽚以⼆进制保存,读取⼆进制转换图⽚⾸先定义数据库连接字符串:String strCn = "server=.;database=DB_NAME;user=sa;pwd=XXX";读取图⽚,将图⽚转换⼆进制保存到数据库⽅法:SqlConnection cn = new SqlConnection(strCn);SqlCommand cmd = new SqlCommand("INSERT INTO ProductID_Image (ProductID,ImageData) VALUES ('1',@BLOBData)", cn);String strBLOBFilePath = @"C:/Users/Administrator/Desktop/打印模板.jpeg";FileStream fsBLOBFile = new FileStream(strBLOBFilePath, FileMode.Open, FileAccess.Read);Byte[] bytBLOBData = new Byte[fsBLOBFile.Length];fsBLOBFile.Read(bytBLOBData, 0, bytBLOBData.Length);fsBLOBFile.Close();SqlParameter prm = new SqlParameter("@BLOBData", SqlDbType.VarBinary, bytBLOBData.Length, ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, bytBLOBData); cmd.Parameters.Add(prm);cn.Open();cmd.ExecuteNonQuery();cn.Close();读取数据库中⼆进制数据,转换成图⽚⽅法:SqlConnection cn = new SqlConnection(strCn);cn.Open();SqlCommand cmd = new SqlCommand("select ProductID,ImageData from ProductID_Image", cn);SqlDataAdapter da = new SqlDataAdapter(cmd);DataSet ds = new DataSet();da.Fill(ds, "ProductID_Image");int c = ds.Tables["ProductID_Image"].Rows.Count;if (c > 0){Byte[] byteBLOBData = new Byte[0];byteBLOBData = (Byte[])(ds.Tables["ProductID_Image"].Rows[c - 1]["ImageData"]);MemoryStream stmBLOBData = new MemoryStream(byteBLOBData);pictureBox1.Image = Image.FromStream(stmBLOBData);}cn.Close();。

JavaScript读二进制文件并用ajax传输二进制流的方法

JavaScript读二进制文件并用ajax传输二进制流的方法

JavaScript读⼆进制⽂件并⽤ajax传输⼆进制流的⽅法综合⽹上多个教程,加上⾃⼰实践得出的⽅法,⽬前能够兼容⾕歌、IE11、IE10。

htmlbody⾥的内容,没什么特殊的。

<div id="dConfirm"><p style="float: left;margin-left: 20px;margin-top: 20px"><form action="javascript: uploadAndSubmit();" name="demoForm" id="demoForm" method="post" enctype="multipart/form-data"><p>上传⽂件: <input type="file" name="file" id="str_file"/></p><p><input type="submit" value="上传" /></p></form></p></div>读取⼆进制⽂件:function uploadAndSubmit(){filename=document.getElementById("str_file").value;var form = document.forms["demoForm"];if(filename!=""){try{var obj = new ActiveXObject("ADODB.Stream");//这个必然是IE}catch(e){var file = form["file"].files[0];var reader = new FileReader();reader.readAsBinaryString(file);//这个读法是异步的reader.onloadend=function(){// 这个事件在读取结束后,⽆论成功或者失败都会触发if (reader.error) {console.log(reader.error);} else {uploadAndSubmit2(reader.result);}}return;}var bf1=new BinaryFile(filename);//这个读法是同步的uploadAndSubmit2(bf1.ReadAll());}}这⾥要对浏览器类型做⼀下判断,如果不是IE则使⽤FileReader进⾏读取,如果是IE则使⽤activex控件读取。

数据库中图片存储为BLOB类型,如何取出转换

数据库中图片存储为BLOB类型,如何取出转换

数据库中图片存储为BLOB类型,如何取出转换数据库中图片存储为BLOB类型,如何取出转换将blog二进制对象,重新转换为图片文件流绑定到对象上,就可以显示了。

如何将图片存储Aesso数据库中通常对用户上传的图片需要保存到数据库中。

解决方法一般有两种:一种是将图片保存的路径存储到数据库;另一种是将图片以二进制数据流的形式直接写入数据库字段中。

以下为具体方法:一、保存图片的上传路径到数据库:string uppath="";用于保存图片上传路径获取上传图片的文件名string fileFullname = this.FileUpload1.FileName;获取图片上传的时间,以时间作为图片的名字可以防止图片重名string dataName = DateTime.Now.ToString("yyyyMMddhhmmss");获取图片的文件名(不含扩展名)string fileName = fileFullname.Substring(stIndexOf("\\") + 1);获取图片扩展名string type = fileFullname.Substring(stIndexOf(".") + 1);判断是否为要求的格式if (type == "bmp" || type == "jpg" || type == "jpeg" || type == "gif" || type == "JPG" || type == "JPEG" || type == "BMP" || type == "GIF"){将图片上传到指定路径的文件夹this.FileUpload1.SaveAs(Server.MapPath("~/upload") + "\\" + dataName + "." + type);将路径保存到变量,将该变量的值保存到数据库相应字段即可uppath = "~/upload/" + dataName + "." + type;}二、将图片以二进制数据流直接保存到数据库:引用如下命名空间:using System.Drawing;using System.IO;using System.Data.SqlClient;设计数据库时,表中相应的字段类型为iamge保存:图片路径string strPath = this.FileUpload1.PostedFile.FileName.ToString ();读取图片FileStream fs = new System.IO.FileStream(strPath, FileMode.Open, FileAess.Read);BinaryReader br = new BinaryReader(fs);byte[] photo = br.ReadBytes((int)fs.Length);br.Close();fs.Close();存入SqlConnection myConn = new SqlConnection("Data Source=.;Initial Catalog=stumanage;User ID=sa;Password=123");string strComm = " INSERT INTO stuInfo(stuid,stuimage) VALUES(107,@photoBinary )";操作数据库语句根据需要修改SqlCommand myComm = new SqlCommand(strComm, myConn);myComm.Parameters.Add("@photoBinary", SqlDbType.Binary, photo.Length);myComm.Parameters["@photoBinary"].Value = photo;myConn.Open();if (myComm.ExecuteNonQuery() > 0){bel1.Text = "ok";}myConn.Close();读取:...连接数据库字符串省略mycon.Open();SqlCommand mand = newSqlCommand("select stuimage from stuInfo where stuid=107", mycon);查询语句根据需要修改byte[] image = (byte[])mand.ExecuteScalar ();指定从数据库读取出来的图片的保存路径及名字string strPath = "~/Upload/zhangsan.JPG";string strPhotoPath = Server.MapPath(strPath);按上面的路径与名字保存图片文件BinaryWriter bw = new BinaryWriter(File.Open(strPhotoPath,FileMode.OpenOrCreate));bw.Write(image);bw.Close();显示图片this.Image1.ImageUrl = strPath;采用俩种方式可以根据实际需求灵活选择。

图片转二进制(互转)

图片转二进制(互转)

图⽚转⼆进制(互转)Note:图⽚转⼆进制数据只需转化为bate数组⼆进制数据即可,例如要求httpclient发送图⽚⼆进制数据即是把⽣成的bate数组数据发送过去。

如果对⽅明确提出是字符串格式编码,再进⼀步转化就好了使⽤Base64转换图⽚利⽤Base64实现⼆进制和图⽚之间的转换,具体代码如下:import java.awt.image.BufferedImage;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import org.apache.tomcat.util.codec.binary.Base64;public class ImageBinary {public static void main(String[] args) {String fileName = "D://code//test.jpg";System.out.println(getImageBinary(fileName));saveImage(getImageBinary(fileName));}/** 图⽚转换为⼆进制** @param fileName* 本地图⽚路径* @return* 图⽚⼆进制流* */public static String getImageBinary(String fileName) {File f = new File(fileName);BufferedImage bi;try {bi = ImageIO.read(f);ByteArrayOutputStream baos = new ByteArrayOutputStream();ImageIO.write(bi, "jpg", baos);byte[] bytes = baos.toByteArray();return Base64.encodeBase64String(bytes);//return encoder.encodeBuffer(bytes).trim();} catch (IOException e) {e.printStackTrace();}return null;}/*** 将⼆进制转换为图⽚** @param base64String* 图⽚⼆进制流**/public static void saveImage(String base64String) {try {byte[] bytes1 = Base64.decodeBase64(base64String);ByteArrayInputStream bais = new ByteArrayInputStream(bytes1);BufferedImage bi1 = ImageIO.read(bais);File w2 = new File("D://code//22.jpg");// 可以是jpg,png,gif格式ImageIO.write(bi1, "jpg", w2);// 不管输出什么格式图⽚,此处不需改动} catch (IOException e) {e.printStackTrace();}}}⽹络地址url与本地图⽚获取图⽚字节流若通过url访问图⽚并转换为⼆进制流,就不能按照上述⽅法。

asp.net(c#)实现从sqlserver存取二进制图片

asp.net(c#)实现从sqlserver存取二进制图片

(c#)实现从sqlserver存取⼆进制图⽚有⼀个员⼯表Employee,需要保存员⼯照⽚(Photo)到数据库(sql server)上。

员⼯照⽚对应的字段是varbinary(max),也就是要存成⼆进制⽂件类型(这和以前讨巧地存图⽚⽂件路径就不相同了),默认可以为空。

下⾯说说主要实现思路:1、存取图⽚(1)、将图⽚⽂件转换为⼆进制并直接存进sql server///<summary>///将转换成⼆进制码的图⽚保存到数据库中///</summary>public static bool SaveEmployeeImg2Db(Employee model, string path){try{Byte[] imgBytes = SetImgToByte(path);model.Photo = imgBytes;bool flag=EmployeeService.SaveEmployeePhoto(model); //EmployeeService是公司内部的库调⽤,插⼊或者更新照⽚,这⾥不透露细节return flag;}catch (Exception ex){throw ex;}}(2)、在⽹页中上传图⽚{string saveFilePath = serverPath + DateTime.Now.ToString("yyyyMMddHHmmss") + fileName;try{//先存图⽚到服务器this.fuPhoto.PostedFile.SaveAs(saveFilePath);//转成⼆进制Employee model = new Employee(int.Parse(id)); //id是EmployeeId,这⾥是模拟字段bool flag = UploadHelper.SaveEmployeeImg2Db(model, saveFilePath);}catch{//("照⽚上传失败");}finally{//最后删掉该图⽚if (System.IO.File.Exists(saveFilePath)){System.IO.File.Delete(saveFilePath);}}}}else{//("全选择要上传的照⽚");}}(3)、从数据库取出照⽚(返回格式Image)Code上⾯的这个⽅法取出来之后,如果在winform下,直接给⼀个PictureBox的Image属性赋值就可以了。

java十六进制转二进制方法

java十六进制转二进制方法

java十六进制转二进制方法Java是一种常用的编程语言,广泛应用于软件开发和计算机科学领域。

在Java中,可以使用十六进制转二进制的方法将一个十六进制数转换为对应的二进制数。

本文将介绍如何使用Java实现这一转换过程。

我们需要了解十六进制和二进制的表示方法。

在十六进制中,除了0-9的数字外,还包括A-F的字母,分别表示10-15的数。

而在二进制中,只有0和1两个数字。

因此,我们需要将十六进制数中的每一位转换为对应的四位二进制数。

在Java中,可以使用Integer类的toBinaryString()方法将一个十六进制数转换为对应的二进制数。

该方法的用法如下:```javaString binaryString = Integer.toBinaryString(hexNumber);```其中,hexNumber是要转换的十六进制数。

该方法将返回一个字符串,表示对应的二进制数。

下面是一个完整的Java程序示例,将十六进制数转换为二进制数:```javapublic class HexToBinary {public static void main(String[] args) {String hexNumber = "1A"; // 十六进制数String binaryString = hexToBinary(hexNumber);System.out.println("二进制数为:" + binaryString);}public static String hexToBinary(String hexNumber) {int decimal = Integer.parseInt(hexNumber, 16); // 将十六进制数转换为十进制数String binaryString = Integer.toBinaryString(decimal); // 将十进制数转换为二进制数return binaryString;}}```在上面的示例中,我们定义了一个hexToBinary()方法,用于将十六进制数转换为二进制数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1 MySQL存储大容量的二进制文件的格式是 blob ,其实除了图片还可以存别的2 要向数据库存储二进制的文件一定要把要存储的数据转换成二进制流废话就不多说了, 大家看看代码很容易明白, 先来看一个 app 程序, 当然首先您要在数据库中先建立一个用于保存图片的表和相应的列,数据格式为 blobpackage com.lizhe;import Java.io.*;import java.sql.*;public class PutImg {public void putimg( {try {Class.forName("org.gjt.mm.mysql.Driver".newInstance(;String url ="JDBC:mysql://localhost/img?user=root&password=root&useUnicode=true&characterE ncoding= gbk";Connection conn = DriverManager.getConnection(url;Statement stmt = conn.createStatement(;//stmt.execute("insert into imgt (id values (5";stmt.close(;PreparedStatement pstmt = null;String sql = "";File file = new File("c: log.jpg";InputStream photoStream = new FileInputStream(file; //sql = " UPDATE imgt SET img = ? ";sql = "INSERT INTO imgtable (img VALUES (?"; pstmt = conn.prepareStatement(sql;pstmt.setBinaryStream(1, photoStream, (int file.length(; pstmt.executeUpdate(;pstmt.close(;conn.close(;} catch (Exception e {e.printStackTrace(;}}public static void main(String args[]{PutImg pi=new PutImg(;pi.putimg(;}}InputStream photoStream = new FileInputStream(file;可以很清楚的看到我们首先把一个图片文件 (当然也可以是别的什么文件转换成了一个二进制输入流pstmt.setBinaryStream(1, photoStream, (int file.length(;这个方法建议大家去查一下 API 文档 , 第一个参数是通配符位置没的说 , 第二个参数是流 , 这和以往的 string 类型的参数不太一样 , 我刚看到的时候也觉得豁然开朗了 , 但是到这里还没完 , 不同于以往的字符串参数 , 这里我们还需要第三个参数来设置这个流的长度 , 这里也就是这个文件的长度 , 导出数据库中的 sql, 一切都清楚了INSERT INTO `m_diy` V ALUES (2,? JFIF HH?? ExifMM* b j ( 1 r 2 ?i H H Adobe Photoshop CS Windows2007:03:18 23:08:15 ? ??? ? ........等等其实就是将文件先转换成了二进制的流 , 然后插入到了 sql 语言中 , 向数据库写入了很长很长的一段 sql 语句然后我们再来写一个 app 程序将这个文件读出来 , 存储成一个图片文件package com.lizhe;import Java.io.*;import java.sql.*;class GetImg {private static final String URL ="JDBC:MySQL://localhost/img?user=root&password=root&useUnicode=true&characterEncoding=gbk";private Connection conn = null;private PreparedStatement pstmt = null;private ResultSet rs = null;private File file = null;public void blobRead(String outfile, int picID throws Exception { FileOutputStream fos = null;InputStream is = null;byte[] Buffer = new byte[4096];try {Class.forName("org.gjt.mm.mysql.Driver".newInstance(;conn = DriverManager.getConnection(URL;pstmt = conn.prepareStatement("select img from imgt where id=?"; pstmt.setInt(1, picID; // 传入要取的图片的 IDrs = pstmt.executeQuery(;rs.next(;file = new File(outfile;if (!file.exists( {file.createNewFile(; // 如果文件不存在,则创建}fos = new FileOutputStream(file;is = rs.getBinaryStream("img";int size = 0;while ((size = is.read(Buffer != -1 { // System.out.println(size;fos.write(Buffer, 0, size;}} catch (Exception e {System.out.println( e.getMessage(;} finally {// 关闭用到的资源fos.close(;rs.close(;pstmt.close(;conn.close(;}}public static void main(String[] args { try {GetImg gi=new GetImg(;gi.blobRead("c:/getimgs/1.jpg", 5;} catch (Exception e {System.out.println("[Main func error: ]" + e.getMessage(;}}}这里需要注意的是is = rs.getBinaryStream("img";img 是数据库中相应的列名 , 其实和 rs.getString(方法差不多 , 只不过这个方法是读取二进制流的最后在帖两个 bs 系统上用的文件给大家参考通过 Struts 的 action 向数据库写入二进制图片/** Generated by MyEclipse Struts* Template path: templates/Java/JavaClass.vtl*/package com.lizhe.struts.action;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.Statement;import javax.Servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action;import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.upload.FormFile; import com.lizhe.struts.form.UpimgForm;/*** MyEclipse Struts* Creation date: 05-18-2007** XDoclet definition:* @struts.action path="/upimg" name="upimgForm" input="/userhomepage.JSP"* @struts.action-forward name="userhome" path="/userhomepage.jsp"redirect="true" contextRelative="true"*/public class UpimgAction extends Action {/** Generated Methods*//*** Method execute* @param mapping* @param form* @param request* @param response* @return ActionForward* @throws IOException* @throws FileNotFoundException*/public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response throws FileNotFoundException, IOException {UpimgForm upimgForm = (UpimgForm form;// TODO Auto-generated method stubFormFile file=upimgForm.getFile(;InputStream is=file.getInputStream(;try {Class.forName("org.gjt.mm.MySQL.Driver".newInstance(;String url ="JDBC:mysql://localhost/blog?user=root&password=root&useUnicode=true&characterE ncoding= gb2312";Connection conn = DriverManager.getConnection(url;Statement stmt = conn.createStatement(;//stmt.execute("insertinto img (idvalues (5";stmt.close(;PreparedStatement pstmt = null;String sql = "";//File file = new File("c: log.jpg";//InputStream photoStream = new FileInputStream(file;//sql = "UPDA TE imgt SET img =? ";sql = "INSERT INTO img (img VALUES (?";pstmt = conn.prepareStatement(sql;pstmt.setBinaryStream(1, is, (int file.getFileSize(;pstmt.executeUpdate(;pstmt.close(;conn.close(;} catch (Exception e {e.printStackTrace(;}return mapping.findForward("userhomepage";}}和 app 的方式几乎是一样的第二个文件是通过 jsp 将数据库中的图片显示在页面上这个有些不同< %@ page contentType="text/html;charset=gb2312"%> < %@ page import="java.sql.*" %> < %@ page import="java.util.*"%> < %@ page import="java.text.*"%> < %@ page import="java.io.*"%> < %@ pageimport="java.awt.*"%> < html> < body> <%Class.forName("org.gjt.mm.mysql.Driver".newInstance(; Stringurl="jdbc:mysql://localhost/img?user=root&password=root"; Connection con = DriverManager.getConnection(url; String sql = "select * from imgt where id=5";Statement stmt = con.createStatement(; ResultSet rs = stmt.executeQuery(sql;if(rs.next( { InputStream in = rs.getBinaryStream("img"; ServletOutputStream op = response.getOutputStream(; int len; byte[] buf=new byte[1024]; while((len=in.read(buf!=-1 { op.write(buf, 0, len; } op.close(; in.close(; } rs.close(; stmt.close(; con.close(; %> < /body> < /html>。

相关文档
最新文档