通过java或jsp想数据库存取二进制图片(精)
使用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中,表示二进制、八进制和十六进制的方法主要有以下几种: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#将图⽚以⼆进制保存,读取⼆进制转换图⽚⾸先定义数据库连接字符串: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传输⼆进制流的⽅法综合⽹上多个教程,加上⾃⼰实践得出的⽅法,⽬前能够兼容⾕歌、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类型,如何取出转换将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存取二进制图片
(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实现这一转换过程。
我们需要了解十六进制和二进制的表示方法。
在十六进制中,除了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()方法,用于将十六进制数转换为二进制数。
java 读取并保存excel中的图片件
java 读取并保存excel中的图片收藏/** 保存excel中的图片(以文件形式保存,或者存入数据库)** basePath:应用所在路径,附件存放路径:* 参数:is是上传的附件文件流*/public void saveSheetImgByFile(String basePath,InputStream is) throws ParseException { FileOutputStream os = null;try {Workbook wbk = Workbook.getWorkbook(is);//建文件目录File mkFile = new File(basePath);if (!mkFile.exists() && !mkFile.isDirectory()) {mkFile.mkdirs();}// 循环所有sheetfor (int k = 0; k < wbk.getNumberOfSheets(); k++) {Sheet sheet = wbk.getSheet(k);// 共有多少行int imgNumber = sheet.getNumberOfImages();// 获得sheet所包含的图片数// 循环sheet的所有图片for (int i = 0; i < imgNumber; i++) {Image image = sheet.getDrawing(i);byte[] imageData = image.getImageData();String fileName = image.getImageFile().getName().trim()+ ".jpg";File file = new File(basePath+"/" + fileName);os = new FileOutputStream(file);// 建立一个上传文件的输出流os.write(imageData, 0, imageData.length);// 将文件写入服务器}}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {try {if (os != null) {os.close();}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}/** 将excel图片文件保存到数据库*/public void saveSheetImgByDB(InputStream is) throws ParseException,ClassNotFoundException, SQLException, IOException {Class.forName("com.mysql.jdbc.Driver");Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/数据库名?characterEncoding=utf8", "root", "root");String INSERT_PICTURE = "insert into t_mypicture(name, photo) values (?, ?)";PreparedStatement ps = null;FileOutputStream os = null;try {Workbook wbk = Workbook.getWorkbook(is);// 循环所有sheetfor (int k = 0; k < wbk.getNumberOfSheets(); k++) {Sheet sheet = wbk.getSheet(k);// 共有多少行int imgNumber = sheet.getNumberOfImages();// 获得sheet所包含的图片数// 循环sheet的所有图片for (int i = 0; i < imgNumber; i++) {Image image = sheet.getDrawing(i);byte[] imageData = image.getImageData();String fileName = image.getImageFile().getName().trim() + ".jpg";conn.setAutoCommit(false);ps = conn.prepareStatement(INSERT_PICTURE);ps.setString(1, fileName);ps.setBytes(2, imageData);ps.executeUpdate();mit();}}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {try {if (os != null) {os.close();}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}2.action方法调用:ImportExcelUtil ieu = new ImportExcelUtil();ExcelForm excelForm = (ExcelForm) form;FormFile file = excelForm.getExcelFile();// 附件方式保存String basePath = request.getSession().getServletContext().getRealPath( "/")+"excelFile";try {ieu.saveSheetImgByFile(basePath,file.getInputStream());} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}// 数据库方式保存try {ieu.saveSheetImgByDB(file.getInputStream());} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}引文来源java 读取并保存excel中的图片- LIUJIMMY的专栏- CSDN博客。
用JSP实现将图片存入数据库或从数据库中取出
数据库应用程序,特别是基于WEB的数据库应用程序,常会涉及到图片信息的存储和显示。
通常我们使用的方法是将所要显示的图片存在特定的目录下,在数据库中保存相应的图片的名称,在JSP中建立相应的数据源,利用数据库访问技术处理图片信息。
但是,如果我们想动态的显示图片,上述方法就不能满足需要了。
我们必须把图片存入数据库,然后通过编程动态地显示我们需要的图片。
实际操作中,可以利用JSP的编程模式来实现图片的数据库存储和显示。
2、建立后台数据库假定处理的是图片新闻,那么我们可以建立相应的数据库及数据表对象。
我们要存取的数据表结构的SQL脚本如下所示:if exists (select * from dbo.sysobjects where id =object_id(N'[dbo].[picturenews]') andOBJECTPROPERTY(id, N'IsUserTable') = 1)drop table [dbo].[picturenews]GOCREATE TABLE [dbo].[picturenews] ([id] [int] IDENTITY (1, 1) NOT NULL ,[image] [image] NULL ,[content] [varchar] (500) COLLATE Chinese_PRC_CI_AS NULL ,[detail] [varchar] (5000) COLLATE Chinese_PRC_CI_AS NULL) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]GO表picturenews中,字段id作为标识,每存储一行数据,自动增加1。
字段image 用于存储图片信息,其数据类型为“image”。
3、向数据库存储二进制图片启动Dreamweaver MX后,新建一个JSP文件。
其代码如下所示。
<%@ page contentType="text/html;charset=gb2312"%><HTML><HEAD><TITLE>存储图片</TITLE></HEAD><body><!-- 下面的窗体将以Post方法,将数据传递给testimage.jsp文件 --><FORM METHOD=POST ACTION="testimage.jsp">新闻标题:<INPUT TYPE="text" NAME="content"><BR>新闻图片:<INPUT TYPE="file" NAME="image"><BR>新闻内容:<TEXTAREA name="txtmail" rows="15" cols="90"style="BORDER-BOTTOM: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; FONT-SIZE: 9pt;HEIGHT: 200px; WIDTH: 100%" wrap="physical" ></TEXTAREA><br><INPUT TYPE="submit"></form></HTML>将此文件保存为InputImage.jsp文件,其中testimage.jsp文件是用来将图片数据存入数据库的,具体代码如下所示:<%@ page contentType="text/html;charset=gb2312"%><%@ page import="java.sql.*" %><%@ page import="java.util.*"%><%@ page import="java.text.*"%><%@ page import="java.io.*"%><html><body><%Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//加载驱动程序类Connectioncon=DriverManager.getConnection("jdbc:odbc:denglu","sa","sa");//建立数据库联机,其中denglu为数据库名,sa为连接数据库的帐号及密码。
获取文件的二进制流
获取文件的二进制流获取文件的二进制流是指通过特定的方法将文件转换为一串由0和1组成的二进制数列。
二进制流是计算机中对文件数据的一种表示方式,它将文件的内容以二进制形式进行存储和传输。
本文将介绍获取文件二进制流的方法以及二进制流的应用。
一、获取文件的二进制流的方法在计算机中,可以通过多种方式获取文件的二进制流。
以下是几种常见的方法:1. 通过文件读取操作获取二进制流:可以使用编程语言中提供的文件读取函数,如C语言中的fopen和fread函数,Java语言中的FileInputStream类,Python语言中的open函数等,通过这些函数打开文件并逐个字节地读取文件内容,将读取到的字节转换为二进制形式,就可以获得文件的二进制流。
2. 通过网络请求获取二进制流:当文件存储在远程服务器上时,可以通过发送HTTP请求获取文件的二进制流。
可以使用编程语言中提供的网络请求库,如Python中的requests库、Java中的HttpURLConnection类等,发送GET请求获取文件的二进制流。
得到二进制流后,可以进行进一步的处理和存储。
3. 通过文件转换工具获取二进制流:有一些专门的文件转换工具可以将文件转换为二进制流,比如HexEditor等。
通过这些工具,用户可以打开文件,并将文件以二进制形式展示,从而获取文件的二进制流。
二、二进制流的应用获取文件的二进制流后,可以进行多种操作和应用,以下是一些常见的应用场景:1. 文件传输:在网络传输中,常常需要将文件以二进制流的形式传输。
发送端将文件转换为二进制流后,通过网络传输给接收端,接收端再将二进制流转换为文件保存下来。
2. 文件加密:二进制流可以作为加密算法的输入,通过对二进制流进行加密操作,实现对文件内容的保护。
常见的加密算法有AES、DES等。
3. 文件解析:对于某些特定格式的文件,可以通过解析其二进制流来获取文件的具体内容。
比如对于图片文件,可以解析二进制流获取图片的宽度、高度、色彩等信息。
图片转化为二进制数据,并显示出来
图片转化为二进制数据,并显示出来图片转化为二进制数据,并显示出来2009-12-04 17:32:29| 分类:默认分类| 标签:图片转化为二进制数据字号:大中小订阅1.将Image图像文件存入到数据库中我们知道数据库里的Image类型的数据是"二进制数据",因此必须将图像文件转换成字节数组才能存入数据库中.要这里有关数据的操作略写,我将一些代码段写成方法,方便直接调用.//根据文件名(完全路径)public byte[] SetImageToByteArray(string fileName){FileStream fs = new FileStream(fileName, FileMode.Open);int streamLength = (int)fs.Length;byte[] image = new byte[streamLength];fs.Read(image, 0, streamLength);fs.Close();return image;}//另外,在中通过FileUpload控件得到的图像文件可以通过以下方法public byte[] SetImageToByteArray(FileUpload FileUpload1) {Stream stream = FileUpload1.PostedFile.InputStream;byte[] photo = newbyte[FileUpload1.PostedFile.ContentLength];stream.Read(photo, 0, FileUpload1.PostedFile.ContentLength);stream.Close();return photo;}2.从SQL Server数据库读取Image类型的数据,并转换成bytes[]或Image图像文件//要使用SqlDataReader要加载using System.Data.SqlClient命名空间//将数据库中的Image类型转换成byte[]public byte[] SetImage(SqlDataReader reader){return (byte[])reader["Image"];//Image为数据库中存放Image 类型字段}//将byte[]转换成Image图像类型//加载以下命名空间using System.Drawing;/using System.IO;using System.Data.SqlClient;*/public Image SetByteToImage(byte[] mybyte){Image image;MemoryStream mymemorystream = new MemoryStream(mybyte,0, mybyte.Length);image = Image.FromStream(mymemorystream); return image;}。
JavaScript如何转换二进制数据显示成图片
JavaScript如 何 转 换 二 进 制 数 据 显 示 成 图 片
使用JavaScript调用API返回了二进制数据格式的图片,该如何显示到网页上?
首先,直接使用XMLHttpRequest,而不是AJAX,原因已经在中解释。并将responseType设置为arraybuffer
方法一
var uInt8Array = new Uint8Array(xhr.response); var i = uInt8Array.length; var binaryString = new Array(i); while (i--) {
binaryString[i] = String.fromCharCode(uInt8Array[i]); } var data = binaryString.join('');
var imageType = xhr.getResponseHeader("Content-Type"); $('#image').attr("src", "data:" + imageType + ";base64," + data)
方法二
var imageType = xhr.getResponseHeader("Content-Type"); var blob = new Blob([xhr.response], { type: imageType }); var imageUrl = (window.URL || window.webkitURL).createObjectURL(blob); $('#image').attr("src", imageUrl);
java转二进制方法
java转二进制方法Java当今计算机世界中一种最受欢迎的语言。
它结合了原有的CC++言的优势,具备了安全性、高效性、可移植性等众多优势,在计算机行业中受到广泛的应用。
在 Java 中,二进制是它最基本的类型之一,也是广泛使用的处理数据的方式之一。
Java 中的二进制类型是一种二进制储存方式,它使用二进制代码来表示数字。
Java用“补码”的方式来储存二进制数据,这样就能很容易地实现加减乘除等运算。
在 Java 中,所有的数据都是以二进制的形式储存的,因此,在学习 Java 之前,必须要了解二进制的基本知识。
Java供了三种最基本的方法来将数字转换成二进制:进制转换、数位移动和掩码。
1.制转换进制转换是将数字从十进制表示法转换成二进制表示法的基本方法。
在 Java 中,可以使用 Integer.toBinaryString(int)法来实现进制转换,它能够将十进制数字转换成二进制形式的字符串表示。
例如,想要将数字 10换成二进制形式,可以采用如下方式:int number = 10;String binaryString = Integer.toBinaryString(number);System.out.println(binaryString); //出 10102.位移动数位移动是将一个数字的位移动到指定位置来实现转换的一种方法。
在 Java 中,可以使用 Integer.rotateLeftInteger.rotateRight法实现,它们能够将数字位置移动指定次数,从而改变其二进制表示形式。
例如,想要将数字 10位 1转换成二进制形式,可以采用如下方式:int number = 10;int shiftedNumber = Integer.rotateLeft(number, 1);String binaryString =Integer.toBinaryString(shiftedNumber);System.out.println(binaryString); //出 101003.码掩码是使用指定的掩码值来确定要保留的位数以实现转换的一种方法。
js中从blob提取二进制
js中从blob提取二进制文章结构:一、所遇到的问题二、解决方法一、服务器端通过websocket向浏览器端传输图片(二进制),需要根据不同的图片把图片显示在不同的位置,可行的一个方法是先把图片转化成二进制数组,再把二进制数组和一个字节的图片标识拼接在一块传输给浏览器端,最后在浏览器端拆分。
找了好久才找到一些js处理二进制的相关方法,就在此记录一下。
二、1、服务器端二进制拼接:public byte[] mergeByte(byte[] b1,byte[] b2) {byte[] b3=new byte[b1.length+b2.length];System.arraycopy(b1,0,b3,0,b1.length);System.arraycopy(b2,0,b3,b1.length,b2.length);return b3;}2、浏览器端二进制拆分主要利用js中的Blob和FileReader,有关这两个类的知识,可以查看/archives/2012/06/06/273.htmlhttps:///zh-CN/docs/Web/API/FileReaderws.onmessage = function(event){if (event.data instanceof Blob) {var blob = event.data;//先把blob进行拆分,第一个字节是标识var newblob=blob.slice(0,1);//js中的blob没有没有直接读出其数据的方法,通过FileReader来读取相关数据var reader = new FileReader();reader.readAsBinaryString(newblob);var imgFlag;// 当读取操作成功完成时调用.reader.onload = function(evt){if(evt.target.readyState == FileReader.DONE){var imgFlag = evt.target.result;if(imgFlag=='@'){img=document.getElementById('er');}else if(imgFlag=='A'){img=document.getElementById('photo');}else{img=document.getElementById('photo');}newblob=blob.slice(1,blob.size);window.URL = window.URL || window.webkitURL;var source = window.URL.createObjectURL(newblob); img.src=source;}}}。
如何把图片以二进制方式存入SQL Server数据库,并能读取出来
1、建所需数据库和表,语句如下:--建立数据库create database test--使用该数据库use test--建立存放图片的表create table piclist(id int Identity primary key,pic Image not null)2、制作上传图片的模块,代码如下:前台html代码:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="UpPhoto.aspx.cs" Inherits="Test_UpPhoto" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml" ><head runat="server"><title>无标题页</title></head><body><form id="form1" runat="server"><div><input id="UpPhoto" name="UpPhoto" runat="server" type="file" /><asp:Button id="btnAdd" runat="server" Text="上传" OnClick="btnAdd_Click"></asp:Button> </div></form></body></html>后台代码:using System;using System.Data;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.IO;using System.Data.SqlClient;public partial class Test_UpPhoto : System.Web.UI.Pageprotected void Page_Load(object sender, EventArgs e){}protected void btnAdd_Click(object sender, EventArgs e){//获得图象并把图象转换为byte[]HttpPostedFile upPhoto = UpPhoto.PostedFile;int upPhotoLength = upPhoto.ContentLength;byte[] PhotoArray = new Byte[upPhotoLength];Stream PhotoStream = upPhoto.InputStream;PhotoStream.Read(PhotoArray, 0, upPhotoLength);//连接数据库string ConStr = "server=(local);user id=sa;pwd=sa;database=test";SqlConnection conn = new SqlConnection(ConStr);string strSql = "Insert into piclist(pic) values(@pic)";SqlCommand cmd = new SqlCommand(strSql, conn);cmd.Parameters.Add("@pic", SqlDbType.Image);cmd.Parameters["@pic"].Value = PhotoArray;conn.Open();cmd.ExecuteNonQuery();conn.Close();Response.Write("图片上传成功");}}3、制作显示图片的模块(单独显示图片,即没用到datalist):后台代码:using System;using System.Data;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.Data.SqlClient;using System.IO;public partial class Test_ShowPhoto : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){if(!Page.IsPostBack){//连接数据库string ConnStr = "server=(local);user id=sa;pwd=sa;database=test";string strSql = "select * from piclist";SqlConnection conn = new SqlConnection(ConnStr);conn.Open();SqlCommand cmd=new SqlCommand(strSql,conn);SqlDataReader reader = cmd.ExecuteReader();while (reader.Read()){Response.ContentType = "application/octet-stream";Response.BinaryWrite((Byte[])reader["pic"]);Response.Write("successful");}reader.Close();conn.Close();Response.End();}}}补充步骤3,用datalist显示图片方法:建立两个 页面,名称为piclist.aspx和StreamImg.aspx。
java二进制写法
java二进制写法
Java是一门非常灵活的编程语言,它的语法和结构都十分优雅。
它的数据存储方式也同样有很多特点。
Java中以二进制方式进行数据存储时,我们需要采用二进制写法。
下面我们来了解一下Java的二进制写法。
首先,Java中的二进制数必须以“0b”或“0B”开头。
这是因为在Java中默认即为十进制方式表示。
例如,十进制数“9”在Java中写成“9”,而二进制数“1001”,则可写为“0b1001”。
在Java中,支持使用二进制写法的数据类型包括整型(byte、short、int、long)、布尔类型(boolean),以及字符型(char)。
对于整型类型的数据,在Java中提供了位运算符,可以方便地进行位运算操作。
在二进制写法中,如果要表示一个负数,需要使用Java中的补码表示。
而且,有一种特殊的情况,当一个数的最高位为1时,Java 就会默认这个数为负数。
例如,如果要表示十进制数“-1”,那么应该写成“0b11111111”。
总之,在Java中使用二进制写法进行数据存储非常方便和灵活。
只需要记住以“0b”或“0B”开头,并注意数据类型和补码的使用即可。
同时,了解Java中的位运算符也可以帮助我们更加灵活地操作二进制数据。
Java中实现十进制数转换为二进制的三种思路
Java中 实 现 十 进 制 数 转 换 为 二 进 制 的 三 种 思 路
Java中 实 现 十 进 制 数 转 换 为 二 进 制
第一种:除基倒取余法
12 }
但是int型最大只能表示2^31-1 的正数,所以,存储的二进制数位数有限;我们都知道,int在java中的存储范围是32位,则可以使用字符串 的拼接(+)来实现,代码如下:
1 public void binaryToDecimal(int n){
2 String str = "";
3 while(n!=0){
小小的建议: 此代码中,可以直接用字符串输出;也可以利用Interger.parseInt()转化为int,但不建议这种方式,当为负数时,int型的表示 不了32的一个整数
作,直到最后一位 ,代码如下。可以说,这是我到目前为止见到的最简单的实现方式了。
1 public void binaryToDecimal(int n){
2 for(int i = 31;i >= 0; i--)
3
System.out.print(n >>> i & 1);
4}
说明:由于计算机中存储的都是数的补码,正数的原码、反码、补码都是相同的;而负数的原码、反码、补码是不一样的,补码=原码取反 +1(符号位不变)。所以,负数是按照它的补码输出的。
>>>为逻辑移位符,向右移n位,高位补0 >> 算数移位符,也是向右移n位,不同的是:正数高位补0,负数高位补1 << 移位符,向左移n位,低位补0
JAVA中读取文件(二进制,字符)内容的几种方法总结
JAVA中读取⽂件(⼆进制,字符)内容的⼏种⽅法总结JAVA中读取⽂件内容的⽅法有很多,⽐如按字节读取⽂件内容,按字符读取⽂件内容,按⾏读取⽂件内容,随机读取⽂件内容等⽅法,本⽂就以上⽅法的具体实现给出代码,需要的可以直接复制使⽤public class ReadFromFile {/*** 以字节为单位读取⽂件,常⽤于读⼆进制⽂件,如图⽚、声⾳、影像等⽂件。
*/public static void readFileByBytes(String fileName) {File file = new File(fileName);InputStream in = null;try {System.out.println("以字节为单位读取⽂件内容,⼀次读⼀个字节:");// ⼀次读⼀个字节in = new FileInputStream(file);int tempbyte;while ((tempbyte = in.read()) != -1) {System.out.write(tempbyte);}in.close();} catch (IOException e) {e.printStackTrace();return;}try {System.out.println("以字节为单位读取⽂件内容,⼀次读多个字节:");// ⼀次读多个字节byte[] tempbytes = new byte[100];int byteread = 0;in = new FileInputStream(fileName);ReadFromFile.showAvailableBytes(in);// 读⼊多个字节到字节数组中,byteread为⼀次读⼊的字节数while ((byteread = in.read(tempbytes)) != -1) {System.out.write(tempbytes, 0, byteread);}} catch (Exception e1) {e1.printStackTrace();} finally {if (in != null) {try {in.close();} catch (IOException e1) {}}}}/*** 以字符为单位读取⽂件,常⽤于读⽂本,数字等类型的⽂件*/public static void readFileByChars(String fileName) {File file = new File(fileName);Reader reader = null;try {System.out.println("以字符为单位读取⽂件内容,⼀次读⼀个字节:");// ⼀次读⼀个字符reader = new InputStreamReader(new FileInputStream(file));int tempchar;while ((tempchar = reader.read()) != -1) {// 对于windows下,\r\n这两个字符在⼀起时,表⽰⼀个换⾏。
js如何将文件数组改成二进制数组的方法
js如何将文件数组改成二进制数组的方法【前言】随着前端技术的不断发展,我们需要在网页中处理大量的二进制数据,例如图片、视频、音频等各种格式的文件。
在处理这些文件时,我们往往需要将它们转换成二进制数组,以便于在浏览器中进行存储和传输。
今天,我来分享一下如何将文件数组转换成二进制数组的方法。
希望对大家有所帮助!【正文】一、获取文件数组在将文件数组转换成二进制数组之前,我们需要先获取文件数组。
这可以通过使用HTML5中的File API来实现。
例如,我们可以使用以下代码来获取一个文件数组:```<input type="file" id="file-input"><script>var fileInput = document.getElementById('file-input');fileInput.addEventListener('change', function() {var file = fileInput.files[0];var reader = new FileReader();reader.readAsArrayBuffer(file);reader.onload = function() {var fileArray = new Uint8Array(reader.result);console.log(fileArray);};});</script>```上面的代码创建了一个input元素,通过用户选择文件后获取文件数组,并将其打印到控制台中。
二、将文件数组转换成二进制数组接下来,我们需要将获取到的文件数组转换成二进制数组。
这可以通过使用Javascript中的TypedArray来实现。
在TypedArray中,我们可以使用Uint8Array、Uint16Array等不同的类型来表示不同的二进制数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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>。