导航:首页 > 动漫图片 > 怎么往int类型里存图片

怎么往int类型里存图片

发布时间:2023-01-01 10:09:32

① 我想创建一个数据库用来存储图片 在SQL 2005中我创了一个表,create table a( int id smallint primary k

image 是图片格式的
而你的C:\Users\angle\Pictures\Pictures\2.jpg是个图片路径
存储图片的时候 一般只存储图片路径 就可以 这样数据库就比较轻便
你的方式是存储图片的二进制流 存的话数据库会很大

如何在sql server中存储图片

1、首先可以存储图片链接,设置图片链接字段,如下图所示。

③ 如何在数据库中同时保存文本和图片

  1. 向数据库中保存不同类型的文件,和在数据库中保存图片是一样的。就是向数据库以byte形式存入

  2. 向数据库中保存不同类型的文件,和在数据库中保存图片是一样的。就是向数据库以byte形式存入

  3. 然后就是写入数据库,代码如下:

FileInfo fi = new FileInfo( txtFileName.Text );// Replace with your file name
if ( fi.Exists
{
byte[] bData = null;

int nNewFileID = 0;

// Read file data into buffer

using ( FileStream fs = fi.OpenRead() )
{

bData = new byte[fi.Length];

int nReadLength = fs.Read( bData,0, (int)(fi.Length) );

}

// Add file info into DB

string strQuery = "INSERT INTO FileInfo "

+ " ( FileName, FullName, FileData ) "

+ " VALUES "

+ " ( @FileName, @FullName, @FileData ) "

+ " SELECT @@IDENTITY AS 'Identity'";

SqlCommand sqlComm = new SqlCommand( strQuery, sqlConn );

sqlComm.Parameters.Add( "@FileName", fi.Name );

sqlComm.Parameters.Add( "@FullName", fi.FullName );

sqlComm.Parameters.Add( "@FileData", bData );
// Get new file ID

SqlDataReader sqlReader = sqlComm.ExecuteReader();

if( sqlReader.Read() )

{

nNewFileID = int.Parse(sqlReader.GetValue(0).ToString());

}
sqlReader.Close();
sqlComm.Dispose();

if( nNewFileID > 0 )
{
// Add new item in list view

ListViewItem itmNew = lsvFileInfo.Items.Add( fi.Name );

itmNew.Tag = nNewFileID;
}
}

4.而读出的代码如下:

// Get new file name

stringstrFullName =
dlgFBSave.SelectedPath;

if( strFullName[strFullName.Length - 1] != '//'
)

strFullName
+= @"/";

strFullName +=
lsvFileInfo.SelectedItems[0].Text;

stringstrQuery = "SELECT FileData FROM FileInfo
"

+
" WHERE FileID = " + lsvFileInfo.SelectedItems[0].Tag.ToString();

SqlDataAdapter
sqlDAdapter =newSqlDataAdapter(strQuery,sqlConn);

DataSet
sqlRecordSet =newDataSet();

byte[] bData =null;

//Get file data from DB

try

{

sqlDAdapter.Fill(
sqlRecordSet, "FileInfo" );

foreach( DataRow drinsqlRecordSet.Tables["FileInfo"].Rows)

{

if( dr["FileData"] != DBNull.Value )

bData
= (byte[] )dr["FileData"];

}

}

catch(SqlException sqlErr)

{

MessageBox.Show(
sqlErr.Message );

}

catch

{

MessageBox.Show(
"Failed to read data from DB!" );

}

sqlRecordSet.Dispose();

sqlDAdapter.Dispose();

if( bData !=null)

{

// Save file

FileInfo
fi =newFileInfo( strFullName
);

if( !fi.Exists )

{

//Create the file.

using(FileStream fs = fi.Create())

{

fs.Write(
bData, 0, bData.Length);

}

}

else

{

//Create the file.

using(FileStream fs =
fi.OpenWrite())

{

fs.Write(
bData, 0, bData.Length);

}

}

}

④ for循环一个int数组,如何把List<String>里的每一个图片地址添加到对应的Int数组里面

不是很明白你的意思,如果纯粹想用数字代替img是不可能的,不是一种数据类型,如果只是为了做索引排序的话可以考虑可以考虑使用map<int, String>啊,不知道你是什么语言,

  1. C++可以使用map<int, String> kv

    kv.insert(pair<int, String>(1,mimg.position(0)));

    kv.insert(pair<int, String>(2,mimg.position(1)));

    kv.insert(pair<int, String>(3,mimg.position(2)));

    ... ...

    kv.insert(pair<int, String>(9,mimg.position(8)));

    使用的时候就是

String str = kv.find(1)->second

str =kv.find(2)->second

... ...

2.C#可以是Dictionary<int, String> kv

kv.Add(1, mimg.position(0));

kv.Add(2,mimg.position(1));

kv.Add(3mimg.position(2));

... ...

kv.Add(9,mimg.position(8));

使用的时候就是

String str = kv[1] ;

str =kv[2] ;

... ...

3.Java可以是HashMap<int, String> kv

kv.put(1,mimg.position(0));

kv.put(2,mimg.position(1));

kv.put(3mimg.position(2));

... ...

kv.put(9,mimg.position(8));

使用的时候就是

String str = kv.get(1) ;

str =kv.get(2);

... ...


4.C语言就比较复杂了,需要结构体,还要写插入获取方法,当然,也可以取巧。

char* indexs[0];

int count;

memset(indexs, 0, sizeof(indexs));

for(count = 0; count < 9; count++)

{

indexs[count ] = xxx xxx;

}

然后使用的时候 char* str = indexs[1]; 这种方法索引也是从0开始,但与list的差别是list排序是按它的方法,这个可以按照自己的意思重新排,比如indexs[0]可以对应list中第3个图片路径。

⑤ 有n个int数据,保存在内存中,可能会如何存储绘制一个示意图

有n个int数据,如果是以数组的形式申明的,则它们保存在内存中,是以“邻居”的形式存储的。

比如说,int arr[100];

则它们在内存中,是以连续100个int单元的形式存储的。首先是arr[0],然后它的下一个是arr[1],然后是arr[2],……,最后是arr[99]。

⑥ C#ACCESS做后台,如何存放图片

首先将图片转为大字符穿string64

方法:1存储--------------------

//为了选图片方便我用了个控件..你应该知道这是什么

OpenFileDialogof=newOpenFileDialog();

if(of.ShowDialog()==DialogResult.OK)

{

//获取图片路径

Filepatch=of.FileName.ToString();

//图片名称

Filekname=Path.GetExtension(Filepatch).Substring(1,3);

intKslength=Filepatch.LastIndexOf("\")+1;

ImageName=Filepatch.Substring(Kslength);

}

Imageim=Image.FromFile(Filepatch);

//内存流

MemoryStreamms=newMemoryStream();

//保存流

im.Save(ms,getimagetype(Filekname));

byte[]by=ms.GetBuffer();

UTF8=by;

//转换为string类型了

stringutf8zj=Convert.ToBase64String(by);

//这步是我给他写到了文件里面.你可以直接写到数据库中

StreamWritersw=newStreamWriter("d://测试流.txt",false,System.Text.Encoding.UTF8,128);

sw.WriteLine(utf8zj);

sw.Close();

MessageBox.Show("成功保存!--d://测试流.txt");

方法2读取--------------------

stringutf8zj;

//我这个是在文件里读取,你应该在数据库,那里我就不写了是你的程序..

StreamReadersr=newStreamReader("d://测试流.txt",System.Text.Encoding.UTF8,true,128);

//读取字符串流

utf8zj=sr.ReadToEnd();

//加载到内存

MemoryStreamms=newMemoryStream(Convert.FromBase64String(utf8zj));

//显示

this.pictureBox1.Image=newBitmap(ms);

Bitmapb=newBitmap(ms);

stringpach=Application.StartupPath+@"img"+ImageName+"";

b.Save(pach);

sr.Close();

以上都很简单的。如果你不明白加我QQ51606768我给你一个我有个小例子

⑦ 怎样把图片存入SQL数据库表中

一、先来熟悉一下将要使用的对象方法:

  1. 用来获取上一个页面传 递过来的数据一般是使用Request对象。同样的,我们也可以使用Request对象 来获取上传上来的文件数据,使用的方法是Request.BinaryRead()。

  2. 要从数据库中读出来图片的数据显示到网页上面要用到的方法是:Request.BinaryWrite()。

二、在得到了图片的数据,要保存到数据库中的时候,不可以直接使用Insert语句对数据库进行操作,而是要使用ADO的AppendChunk方法。

  1. 同样的,读出数据库中的图片数据,要使用GetChunk方法。

  2. 各个方法的具体语法如下:

*Request.BinaryRead语法:

variant=Request.BinaryRead(count)

参数

variant

返回值保存着从客户端读取到数据。

count

指明要从客户端读取的数据量大小,这个值小于或者等于使用方法

Request.TotalBytes得到的数据量。

*Request.BinaryWrite语法:

Request.BinaryWritedata

参数

data

要写入到客户端浏览器中的数据包。

*Request.TotalBytes语法:

variant=Request.TotalBytes

参数

variant

返回从客户端读取到数据量的字节数。

*AppendChunk语法

将数据追加到大型文本、二进制数据Field或Parameter对象。

object.AppendChunkData

参数

objectField或Parameter对象

Data变体型,包含追加到对象中的数据。

说明

使用Field或Parameter对象的AppendChunk方法可将长二进制或字符数

据填写到对象中。在系统内存有限的情况下,可以使用AppendChunk方法对长

整型值进行部分而非全部的操作。

*GetChunk语法

返回大型文本或二进制数据Field对象的全部或部分内容。

variable=field.GetChunk(Size)

返回值

返回变体型。

参数

Size长整型表达式,等于所要检索的字节或字符数。

说明

使用Field对象的GetChunk方法检索其部分或全部长二进制或字符数据。

在系统内存有限的情况下,可使用GetChunk方法处理部分而非全部的长整型

值。

GetChunk调用返回的数据将赋给“变量”。如果Size大于剩余的数据,则

GetChunk仅返回剩余的数据而无需用空白填充“变量”。如果字段为空,则

GetChunk方法返回Null。

每个后续的GetChunk调用将检索从前一次GetChunk调用停止处开始的数

据。但是,如果从一个字段检索数据然后在当前记录中设置或读取另一个字段

的值,ADO将认为已从第一个字段中检索出数据。如果在第一个字段上再次调

用GetChunk方法,ADO将把调用解释为新的GetChunk操作并从记录的起始

处开始读取。如果其他Recordset对象不是首个Recordset对象的副本,则

访问其中的字段不会破坏GetChunk操作。

如果Field对象的Attributes属性中的adFldLong位设置为True,则可

以对该字段使用GetChunk方法。

如果在Field对象上使用Getchunk方法时没有当前记录,将产生错误3021

(无当前记录)。

三、设计数据库,作为测试的数据库结构如下(Access97):

字段名称类型描述

id自动编号主键值

imgOLE对象用来保存图片数据

对于在MSSQLServer7中,对应的结构如下:

字段名称类型描述

idint(Identity)主键值

imgimage用来保存图片数据

四、正式编写纯ASP代码上传部分了,首先,有一个提供给用户的上传界面,可以让用户选择要上传的图片。代码如下(upload.htm):

<html>

<body>

<center>

<formname="mainForm"enctype="multipart/form-data"

action="process.asp"method=post>

<inputtype=filename=mefile><br>

<inputtype=submitname=okvalue="OK">

</form>

</center>

</body>

</html>

注意代码中黑色斜体的部分,一定要在Form中有这个属性,否则,将无

法得到上传上来的数据。

五、接下来,要在process.asp中对从浏览器中获取的数据进行必要的处理,因为在process.asp中获取到的数据不仅仅包含了想要的上传上来的图片的数据,也包含了其他的无用的信息,需要剔除冗余数据,并将处理过的图片数据保存到数据库中,这里以Access97为例。具体代码如下(process.asp):

<%

response.buffer=true

formsize=request.totalbytes

formdata=request.binaryread(formsize)

bncrlf=chrB(13)&chrB(10)

divider=leftB(formdata,clng(instrb(formdata,bncrlf))-1)

datastart=instrb(formdata,bncrlf&bncrlf)+4

dataend=instrb(datastart+1,formdata,divider)-datastart

mydata=midb(formdata,datastart,dataend)setconnGraph=server.CreateObject("ADODB.connection")

connGraph.ConnectionString="driver={MicrosoftAccessDriver(*.mdb)};DBQ="&

server.MapPath("images.mdb")&";uid=;PWD=;"

connGraph.Opensetrec=server.createobject("ADODB.recordset")

rec.Open"SELECT*FROM[images]whereidisnull",connGraph,1,3

rec.addnew

rec("img").appendchunkmydata

rec.update

rec.close

setrec=nothing

setconnGraph=nothing

%>

六、这样就把上传来的图片保存到了名为images.mdb的数据库中了,剩下的工作就是要将数据库中的图片数据显示到网页上面了。

一般在HTML中,显示图片都是使用<IMG>标签,也就是<IMGSRC="图片路径">,但是图片是保存到了数据库中,“图片路径”是什么呢?呵呵,其实这个SRC属性除了指定路径外,也可以这样使用哦:

<IMGSRC="showimg.asp?id=xxx">

所以,要做的就是在showimg.asp中从数据库中读出来符合条件的数据,并返回到SRC属性中就可以了,具体代码如下(showimg.asp):

<%

setconnGraph=server.CreateObject("ADODB.connection")

connGraph.ConnectionString="driver={MicrosoftAccessDriver(*.mdb)};DBQ="&

server.MapPath("images.mdb")&";uid=;PWD=;"

connGraph.Open

setrec=server.createobject("ADODB.recordset")

strsql="selectimgfromimageswhereid="&trim(request("id"))

rec.openstrsql,connGraph,1,1

Response.ContentType="image/*"

Response.BinaryWriterec("img").getChunk(7500000)

rec.close

setrec=nothing

setconnGraph=nothing

%>

七、注意在输出到浏览器之前一定要指Response.ContentType="image/*",以便正常显示图片。最后要注意的地方是,我的process.asp中作的处理没有考虑到第一页(upload.htm)中还有其他数据,比如<INPUTtype=tesxtname=userid>等等,如果有这些项目,process.asp就要注意处理掉不必要的数据。

⑧ 探求Oracle数据库怎样存储图片

商品图片,用户上传的头像,其他方面的图片。目前业界存储图片有两种做法:
1、 把图片直接以二进制形式存储在数据库中
一般数据库提供一个二进制字段来存储二进制数据。比如MySQL中有个blob字段。Oracle数据库中是blob或bfile类型
2、 图片存储在磁盘上,数据库字段中保存的是图片的路径。
一、图片以二进制形式直接存储在数据库中
第一种存储实现(PHP语言):
大体思路:
1、将读取到的图片用php程序转化成二进制形式。再结合insert into 语句插入数据表中的blob类型字段中去。
3、 从数据库取出图片展示的时候。则是直接发送图片内容
4、
$row=mysql_fetch_object($result);
Header( "Content-type: image/gif");
echo $row->this_image;
实现代码如下:
$PicturePath = ‘/tmp/xxxjgjgj.jpg’;//假设这是上传的图片,php放在一个临时文件夹。脚本执行完毕后自动删除了。
$imgStream = fread(fopen($PicturePath, "r");
$blob_img = fread(fopen($imgStream, "r"), filesize($PicturePath));
$sql =” INSERT INTO Images (this_image) VALUES ($blob_img)";
注:this_image就是数据表中一个blob字段类型的字段
================取出展示图片代码
$result=mysql_query("SELECT * FROM Images WHERE PicNum=$PicNum") or die("Cant perform Query");
$row=mysql_fetch_object($result);
Header( "Content-type: image/gif");
echo $row-> this_image;
总结:处理代码感觉还真比较麻烦。其实,我从来没用过在数据库中以二进制存储图片的做法。我们用得更多的是存储图片的路径,实际图片是在磁盘上保存的(图片二进制放到数据库,把数据库的负担弄重了)。
据我了解,互联网环境中,大访问量,数据库速度和性能方面很重要。一般在数据库存储图片的做法比较少,更多的是将图片路径存储在数据库中,展示图片的时候只需要连接磁盘路径把图片载入进来即可。因为图片是属于大字段。一张图片可能1m到几m。
有个原则:图片尽量不要存储在数据库中(是指不要二进制形式保存到字段,而只保存图片的路径)。这样的大字段数据会加重数据库的负担,拖慢数据库。在大并发访问的情况下很重要。这是一个经验。去看看dba对数据库性能调优方面的分析都能得到这个答案的:就是图片不要存储在数据库中。
就像这个规则一样:文章分为标题、作者、添加时间、更新时间、文章内容、文章关键字
文章内容一般是比较长的。经常使用text字段去存储。文章的内容就属于大字段。一般文章内容可以拆分到单独一个表中去。不要与文章信息存储在一张表里面。
我理解的原理是:mysql中一张表的数据是全部在一个数据文件中的。如果大字段的数据也存储在里面。程序展示列表,比如文章列表。这个时候根本不需要展示文章内容的。但是仍然会影响速度,数据库查找数据其实就是扫描那个数据文件,文件容量越小,速度就会越快(为什么单表的容量在1g-2g的时候基本上要分表了)。拆分出去到一张单独的表,就是单独的文件了。我觉得,举一反三,相互独立,分离的思想不仅在系统开发中用到,在现实生活中经常存在的。相互混合,就会造成相互影响。小巧,简洁是一种思想。
可以看看这篇翻译的文章,
http//developer.51cto.com/art/201211/364472.htm
作者建议,三种东西永远不要放到数据库里,图片,文件,二进制数据。作者的理由是,
对数据库的读/写的速度永远都赶不上文件系统处理的速度
数据库备份变的巨大,越来越耗时间
对文件的访问需要穿越你的应用层和数据库层
把图片缩略图存到数据库里?很好,那你就不能使用nginx或其它类型的轻量级服务器来处理它们了。
给自己行个方便吧,在数据库里只简单的存放一个磁盘上你的文件的相对路径,或者使用S3(备注:亚马逊云服务)或CDN之类的服务。
============================================================
关于mysql中的blob类型
bolb像int型那样,分为blob、MEDIUMBLOB、LONGBLOB。其实就是从小到大,
blob 容量为64KB ,MEDIUMBLOB 容量为16M,LONGBLOB 容量为4G。
说实话,图片用这样子存储用得还真少。使用php函数serialize进行序列化的值,我看到有人存入这个字段中去。
php手册:serialize返回字符串,此字符串包含了表示 value 的字节流,可以存储于任何地方。
mysql中blob字段存储图片有个通信大小的设置:
图片要传输给mysql存储起来,那么需要涉及到数据通信。mysql中有个配置是限制通信数据大小的。
my.conf配置文件中的max_allowed_packet,mysql默认的值是1M。
好多图片尤其是原始图可能不止1m。传输的数据(也就是图片)超过这个设置大小。结果就会出错
呵呵,限制挺多。感觉好麻烦。这样子明显占用与mysql交互的通信时间嘛。延长响应时长了。我直接丢个图片路径”images/xxxx”给mysql。没这么耗费资源。
其实所谓的性能,最关键是数据库性能。因为随着数据库数据量增大,大部分时间耗费是在php,Java等语言等待数据库返回数据的过程中耗费时间。
网站访问量大了后,具体的语言不是瓶颈,瓶颈都在数据库。用c,,php,java,net都能操作mysql数据库获取数据。语言之间可能存在速度执行差异,但是其实这种差别已经很小了。至少我觉得,给予用户感觉不到明显。执行相差0.0001秒用户感觉并没有明显的区别。可能说,大并发(很多用户同时访问)的时候,就会体现到差别了。其实我觉得,大并发访问是数据库瓶颈。等待数据库给予数据。没达到一定级别实在体现不了差别。数据库数据量达到一定级别。语言相差0.001s会给予用户体验上的差别。我想,这也是为什么php很适合做web开发了。解析页面速度快(解释型语言,不需要编译)。可以用java来与数据库打交道获取数据。php不直接操作数据库,而是调用java提供的数据接口,获取数据,马上展示在页面中。这是利用了php的页面执行速度快的一个优势。
备份图片数据和迁移数据方便
图片以二进制形式存储在数据库,有一个好处:备份的时候方便。直接备份数据库,图片也跟着备份。换句话说,迁移环境的时候是方便。
而图片放在磁盘上的话,数据库中存储的只是图片路径。备份数据库后。磁盘上的图片也要跟着备份才行。
不过我觉得,备份这个好处不是很明显。图片在磁盘上,备份磁盘也没很大的事情。打包压缩也可以了。互联网环境毕竟与传统的软件开发不同,web开发比较关注网站速度。也就是数据库的速度。就像互联网开发中,有时候为了速度,用空间换时间的做法比较普遍,所以往往在设计数据库的时候并不一定遵循传统数据库设计三大范式。
数据库中保存的是图片路径的话,在web开发环境下,其实有个更好处,就是cdn加速。就是下面要进行总结的地方。
二、数据库中保存图片路径
一般是这样子的:
按照年月日生成路径。具体是按照年月日还是按照年月去生成路径,根据自己需要(不一定是按照日期去生成)。
理解为什么要分散到多个文件夹中去才是关键,涉及到一个原理就明白了:
操作系统对单个目录的文件数量是有限制的。当文件数量很多的时候。从目录中获取文件的速度就会越来越慢。所以为了保持速度,才要按照固定规则去分散到多个目录中去。
图片分散到磁盘路径中去。数据库字段中保存的是类似于这样子的”images/2012/09/25/ 1343287394783.jpg”
原来上传的图片文件名称会重新命名保存,比如按照时间戳来生成,1343287394783. jpg。这样子是为了避免文件名重复,多个人往同一个目录上传图片的时候会出现。
反正用什么样的规则命名图片,只要做到图片名称的唯一性即可。
比如网站的并发访问量大,目录的生成分得月细越好。比如精确到小时,一个小时都可以是一个文件夹。同时0.001秒有两个用户同时在上传图片(因为那么就会往同一个小时文件夹里面存图片)。因为时间戳是精确到秒的。为了做到图片名称唯一性而不至于覆盖,生成可以在在时间戳后面继续加毫秒微秒等。总结的规律是,并发访问量越大。就越精确就好了。
我现在还没碰到需要这么精细的。概率比较少。
有个方面总结一下:为什么保存的磁盘路径,是”images/2012/09/25/1343287394783.jpg”,而不是” /images/2012/09/25/ 1343287394783.jpg”(最前面带有斜杠)
我的理解:
连那个斜杠都不要。这里也是做到方便以后系统扩展。
在页面中需要取出图片路径展示图片的时候,如果是相对路径,则可以使用”./”+”images/2012/09/25/1343287394783.jpg”进行组装。
如果需要单独的域名(比如做cdn加速的时候)域名,img1.xxx.com,img2.xxx.com这样的域名,
直接组装 “http//img1.xxx.com/”+”images/2012/09/25/1343287394783.jpg”
当然数据库是可以在前面加斜杠/保存起来,/images/2012/09/25/ 1343287394783.jpg
其实不方便统一。比如相对路径载入图片的时候,则是”.”+” /images/2012/09/25/ 1343287394783.jpg”
可能我还没体会到坏处,以后会遇到问题的。不过,遵循惯例不加斜杠” images/2012/09/25/ 1343287394783.jpg”就对了。
涉及到一个新问题:为什么大部分系统都不会域名保存进去,像这样子http//wwwxxx.com/images/2012/09/25/1343287394783.jpg保存到数据库中
曾经与一个上海的网友聊天,他也是习惯不会把域名保存数据库中过去。但当时我们两聊的时候,他对”域名保存进去的做法”与”不保存域名进去”也没有一个明确利弊。他就觉得,没有什么明显的区别啊。
了解的知识越多,越有利于我们做决定。可能就是一个”感觉区别不是很大”的影响下,去做一个决定,反而对后面是比较大的影响的。至少是增加自己的工作量了。
其实把域名保存进去,也不是什么滔天大罪的事情。但凡是经验丰富的开发人员都不会这样子做。这是一个经验积累出来的,所以上海那个网友也对此并没有明显的概念很正常,他说他不知道cdn方面的(当然觉得存个域名进去没什么大不了的)。需要了解cdn知识,什么情况下会用到cdn知识。
虽然是做开发人员,不需要关注运维和服务器之类的知识。不过了解一些就有利于理解了。
这里涉及到cdn加速。
关于cdn原理(就是内容分发网络)
cdn,我理解其本质就是为了解决距离远产生的速度问题,使用就近的服务。
从中国请求美国一台服务器上的图片。一般比较慢,因为距离这么远,网络传输是存在损耗的,距离越远,传输的时间就越长。一般会看到浏览器左下角显示:“已响应,正在传输数据..”。这不是服务器本身问题了。实际上服务器早就响应请求,把数据发给客户端,但是网络问题,就一直在传输,没传完了。
在中国,是南北距离远的问题。南北还会涉及到跨网,南方用户使用电信居多,北方用户网通居多。两个线路需要跨越,会有时间延迟。北京到广州的距离,如果直接请求
cdn加速就是适应这个需求产生的:现在不请求美国的服务器。直接在中国安放节点(节点是比较笼统的词语,可以理解成一台服务器,也可以理解成一个机房,就是一个点嘛),请求距离近的节点。这样子就不需要那么远的距离了。
记得以前在长沙的网站,团购以城市分站的形式。北京和长沙用的是同一套程序。服务器在长沙。北京用户访问北京站的时候,实际上需要远距离访问长沙的服务器。速度怎么都快不起来。跟服务器性能完全没关系。当时不懂这些。不清楚怎么折腾。看那本《前端优化技巧》,想办法去做js代码压缩,浏览器缓存之类的。实际上瞎折腾。不是说这些前端优化不重要,哲学上有主次矛盾之分,瓶颈在哪里就去突破哪里。没解决主要矛盾,问题并不会迎刃而解。当时也不是数据库瓶颈。如果去优化数据库。也不会明显改善。就那点数据量。根本就达不到瓶颈。哪里谈得上主要矛盾。随着后来去其他公司工作,接触一些东西,类似不找瓶颈的优化例子发生在身边好几次了,先没找到瓶颈就瞎去优化。我的同事可能是抱着多多益善的心态去做的,但主要矛盾(技术上说是瓶颈)没找到,也没改善。
当时如果没想到是距离问题。也就不会想到cdn,当时其实我根本不知道cdn服务。我只知道,google这些网站肯定在中国部署的服务器,要不然,中国用户还去访问美国的服务器,那再好的服务器都会速度慢的。
由于自己搭建cdn环境和机房的资金比较大(需要大量的服务器),也需要人力维护。反正一般的公司弄不起,其实根本不划算。淘宝以前用商用的cdn服务,后来商用的扛不住了,就搭建了自己的cdn网。我不知道新浪有没有自己搭建,但其实我觉得跟淘宝的特点有关,店铺很多,无论是商品还是交易记录总计起来商品很多的图片,图片都是静态的部分,cdn本来就是用来做静态的(图片,css,js等)请求分发用的。
我之前在网上看到一句话,cdn网络不是一般的公司玩得起的。
一般的公司自己搭建cdn网络成本高,所以就有商业的cdn提供付费租用服务,这是一项很成熟的业务,很多这样的公司,大部分全国性的互联网公司都会使用到cdn。
总结:cdn服务。对于静态内容是非常适合的。所以像商品图片,随着访问量大了后,租用cdn服务,只需要把图片上传到他们的服务器上去。
例子:北京访问长沙服务器,距离太远。我完全可以把商品图片,放到北京的云服务(我觉得现在提供给网站使用的云存储其实就是cdn,给网站提供分流和就近访问)上去。这样子北京用户访问的时候,实际上图片就是就近获取。不需要很长距离的传输。
自己用一个域名img.xxxcom来载入图片。这个域名解析到北京的云服务上去。
做法:数据库中保存的是” images/2012/09/25/1343287394783.jpg”,
这些图片实际上不存储在web服务器上。上传到北京的cdn服务器上去。
我从数据库取出来,直接”img.xxxcom/”+” images/2012/09/25/1343287394783.jpg”
比如如果还有多个,就命名img1.xxcom、img2.xxcom
反正可以随便。所以如果把域名直接保存进去。就显得很麻烦了。迁移麻烦。
像淘宝,凡客,亚马逊这些电子商务网站,我们看到请求的时候,下面往往会有
img1.xxx.cdncom
img2.xxx.cdncom
其实他们保存在数据库中的是相对路径。有些是不需要在数据库保存的,缩略图可以实时访问的时候用程序生成(节省很多存储空间)
实际上,把域名保存在数据库中,非常不利于系统迁移。一旦换个域名的话,原来保存在数据库中的是“wwwabc.om/images/xxxxxx“,因为路径都在数据库中写死了。下回换个域名就用不了了。那个时候自己去写sql语句批量更新字段吧。
几个术语:
icp,Internet Content Provider,也就是网络内容提供者。联想到我们运营一个网站需要icp备案了吗?你自己运营网站,你就是icp服务商
IDC(Internet Data Center),互联网数据中心。IDC的概念,目前还没有一个统一的标准。通俗点,就是提供机房托管(服务器租用和托管),域名注册之类的。
关于淘宝的图片存储
了解到:淘宝以前使用了商用的存储。但是没法满足需求。据说,到2010年,淘宝网后端保存着286亿张图片。商用的系统系统没法满足需求的时候。他们就自己开发了一个tfs。大规模的小文件在磁盘上读取,需要磁盘磁头频繁的寻道和换道。大并发情况下和大量的操作确实很麻烦。其实借鉴了当时google公布的gfs设计论文。google有相册服务。为每个用户提供上传图片存储。
估计,google是率先实现这种小文件网络存储系统的。
有个观点比较好:对于老板们而言,往往觉得,用钱能解决的都不算问题。但问题在于,你遇到的问题,别人都没遇到过。那这个时候你就没有经验可以参考或者直接拿来使用。只有自己参考一些思路去创造技术了。
三、关于图片进行云存储(cdn加速)
曾经看过这个,这个是比较适合创业公司的。价格相对便宜
https//wwwupyun.com/
介绍提到,我们在全国各地部署了55个CDN节点,500多台服务器,电信,联通,移动和教育网的4线带宽。
其实,现在的云存储本质就是一个cdn服务商。你把静态的图片上传到他提供的服务器上去(ftp方式上传或者api形式编写程序上传)。他为你做就近节点访问。
计费方式:按照流量付费,99元购买100g。怎么算流量。每次访问文件的大小累加,比如一个1m的文件,访问一次流量就加1m。
我个人理解,对于图片的量不大的情况下,使用这种云服务,好处不是节省存储空间。你自己的服务器100g的空间可能创业型公司都没用完,不是什么存储空间不够用,然后去用云存储。以前我对cdn比较模糊,有这么点理解,或者以为是分散网站web服务器流压力,服务器分流。这些好处是有的。但是,只要理解了cdn产生的背景和解决的关键问题后,就会明白云存储关键好处在于:给用户就近节点访问,加速。
我觉得,如果不是出于这个考虑,或者达不到这样的目的。用其他方案也完全可以替代。何必使用云存储呢?就是你无非有实力做到全国多个节点去部署服务,才需要租用cdn来帮你,毕竟他们是规模产生的效益,专注于解决这个领域。

⑨ 用c语言如何读取和保存jpg图片文件

有这样一个二进制文件,大小在100M左右,里面存放了多张JPG图片,文件格式如下:
无关数据区
JPG图片数据区
无关数据区
JPG图片数据区
无关数据区
JPG图片数据区
......
已知JPG图片起始标志为:“FF
D8
FF
E0
00
10
4A”,结束标志为:“FF
D9”。
现想把这些JPG图片数据从该文件中读出来,生成一个个单独的图片文件,该如何做呢?
帮你写了个程序,
测试了只含有一个图片信息的文件
int
len=0;
int
filesn=0;
void
ReadJpg(CFile
*sfp,const
char
*dstfile,unsigned
char
a,unsigned
char
b)
{
CFile
nf;
nf.Open(dstfile,CFile::modeCreate|CFile::modeWrite|CFile::typeBinary);
unsigned
t=0,t1=0;
nf.Write(&a,sizeof(char));
nf.Write(&b,sizeof(char));
while(1)
{
sfp->Read(&t,sizeof(char));
len++;
nf.Write(&t,sizeof(char));
if(t==0xFF)
{
sfp->Read(&t1,sizeof(char));
len++;
if(t1==0xD9)
break;
else
nf.Write(&t1,sizeof(char));
}
}
nf.Close();
}
调用:
void
test()
{
CFile
fp;
fp.Open("86b05621.jpg",CFile::modeRead|CFile::typeBinary);//文件名改一下
unsigned
char
a=0,b=0;
len=0;
while(1)
{
fp.Read(&a,sizeof(char));
len++;
if(len>=fp.GetLength())
break;
if(a==0xFF)
{
fp.Read(&b,sizeof(char));
len++;
if(b==0xD8)
{
filesn++;
char
filename[256];
sprintf(filename,"Jpg
%d.jpg",filesn);
ReadJpg(&fp,filename,a,b);
}
}
}
fp.Close();
}
思路是,先得到FF的值,然后再判断下一位是否是0xD8,
但这里要说明一下,如果你的其它数据信息里也含有FF
D8值的话就会出错了,
所以为保险起见,应该再多比较几位,
JPG的头是固定的,再往下就是EF
E0
00
1E,
建议楼主再往下比较四位比较保险(在程序中稍作修改即可)
你是不是在
分析某个
游戏的或程序的资源文件呀,如果是的话,这个资源文件应该配有一个
索引文件!或在其文件自身。索引可以列表索引,链表形示……
如果是你自已生成的文件包,最好加上索引,因为这样可以提高效率!

⑩ 如何向ORACLE数据库表中存入带图片的文件

create table test
(
NID VARCHAR2(1) not null,
IMG BLOB,
zhengqueFlag VARCHAR2(1),
cuowuFlag VARCHAR2(1)
)
说明:
1、IMG字段只需要保存图片,将图片信息经过Base64编码,存到数据库BLOB字段中。显示的时候要经过Base64解码。
2、对于像“正确”、“错误”用标志位在区别。你可以用1表示正确、0表示错误。当然你也可以用汉字的保存这样的信息。自己来设计。

然后你到网上查一下怎么样对BLOB字段进行操作。如果不行,我在增加回复。

阅读全文

与怎么往int类型里存图片相关的资料

热点内容
电脑图片png怎么转jpg格式 浏览:297
做衣服的软尺图片 浏览:467
奶酷脸男生图片 浏览:875
如何选合适的背景图片 浏览:546
小女孩掰手腕图片 浏览:626
抱书的女孩子的图片二次元 浏览:984
中童短发的发型图片女 浏览:755
女孩屁股的图片 浏览:944
手工立体作品图片大全 浏览:572
9张手机图片转word文档 浏览:191
狼女图片动漫 浏览:671
ct的日期怎么看图片 浏览:372
铃木重机车图片和价格 浏览:688
乳罩品牌价格及图片 浏览:732
热巴黑红衣服在一起的图片 浏览:267
伤感图片下面带文字的图片 浏览:863
k的动漫图片大全 浏览:418
发烧的女孩图片 浏览:95
男生带帽子伤感图片 浏览:727
废旧衣服变宝图片 浏览:672