php 数据库图片存储问题

php 数据库图片存储问题,第1张

存储的是相对路径,可以到网站服务器上查看,应该有upload文件夹,里面就是存储的,这样写的好处是节省了数据库存储空间,转移的时候可以直接将整个服务器的打包转移。

访问的时候,前面可以拼接域名和指定的路径,这些后台可以轻松获取到,然后拼接上服务器的路径,我们就可以直接在网页上访问到了。

这是很常见的数据库保存方式,和直接把的二进制存入数据库,这样的方式便于检索,占用空间小。当然,目前主流都采用oss来单独存储文件了,就是有专门的文件服务器,这个时候,一般存储的是完整的路径。

1、在打开SQL Server Managemenet Studio窗口,在对象资源管理器窗口依次站看数据库——新建的数据库节点。

2、鼠标右键单击视图节点,在d出的快捷菜单中选择新建视图命令。

3、从添加表对话框中选择建立新视图的基表,视图和函数。

4、根据新建视图的需要,从表中选择视图引用的列。可以再关系图中选中相应表的相应列左边的复选框来完成。

5、最后,在视图设计器窗口中单击工具栏中的验证SQL语法,按钮检查T-SQL语法。确认语法正确后,单击执行 SQL按钮预览视图返回的结果。

通常对用户上传的需要保存到数据库中。解决方法一般有两种:一种是将保存的路径存储到数据库;另一种是将以二进制数据流的形式直接写入数据库字段中。以下为具体方法:

一、保存的上传路径到数据库:

string uppath="";//用于保存上传路径

//获取上传的文件名

string fileFullname = thisFileUpload1FileName;

//获取上传的时间,以时间作为的名字可以防止重名

string dataName = DateTimeNowToString("yyyyMMddhhmmss");

//获取的文件名(不含扩展名)

string fileName = fileFullnameSubstring(fileFullnameLastIndexOf("\\") + 1);

//获取扩展名

string type = fileFullnameSubstring(fileFullnameLastIndexOf("") + 1);

//判断是否为要求的格式

if (type == "bmp" || type == "jpg" || type == "jpeg" || type == "gif" || type == "JPG" || type == "JPEG" || type == "BMP" || type == "GIF")

{

//将上传到指定路径的文件夹

thisFileUpload1SaveAs(ServerMapPath("~/upload") + "\\" + dataName + "" + type);

//将路径保存到变量,将该变量的值保存到数据库相应字段即可

uppath = "~/upload/" + dataName + "" + type;

}

二、将以二进制数据流直接保存到数据库:

引用如下命名空间:

using SystemDrawing;

using SystemIO;

using SystemDataSqlClient;

设计数据库时,表中相应的字段类型为iamge

保存:

//路径

string strPath = thisFileUpload1PostedFileFileNameToString ();

//读取

FileStream fs = new SystemIOFileStream(strPath, FileModeOpen, FileAccessRead);

BinaryReader br = new BinaryReader(fs);

byte[] photo = brReadBytes((int)fsLength);

brClose();

fsClose();

//存入

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);

myCommParametersAdd("@photoBinary", SqlDbTypeBinary, photoLength);

myCommParameters["@photoBinary"]Value = photo;

myConnOpen();

if (myCommExecuteNonQuery() > 0)

{

thisLabel1Text = "ok";

}

myConnClose();

读取:

连接数据库字符串省略

myconOpen();

SqlCommand command = new

SqlCommand("select stuimage from stuInfo where stuid=107", mycon);//查询语句根据需要修改

byte[] image = (byte[])commandExecuteScalar ();

//指定从数据库读取出来的的保存路径及名字

string strPath = "~/Upload/zhangsanJPG";

string strPhotoPath = ServerMapPath(strPath);

//按上面的路径与名字保存文件

BinaryWriter bw = new BinaryWriter(FileOpen(strPhotoPath,FileModeOpenOrCreate));

bwWrite(image);

bwClose();

//显示

thisImage1ImageUrl = strPath;

采用俩种方式可以根据实际需求灵活选择。

1、首先,打开Access,选择文件菜单中的“新建“,选择一种数据库类型,这里选择的是本地数据库,即”空白桌面数据库“,如下图所示。

2、在d出的新对话框中设置数据库的名字,如下图所示。

3、然后点击浏览,为数据库设置一个保存的位置,如下图所示。

4、数据库名称和保存位置设置完成后,返回数据库设置界面,点击”创建“,如下图所示。

5、这样,就用Access创建了一个新的空白数据库,就可以在数据库里创建数据表来存储jpg了,如下图所示。

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

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

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

FileInfo fi = new FileInfo( txtFileNameText );// Replace with your file name

        if ( fiExists

        {

         byte[] bData = null;

int nNewFileID = 0;

// Read file data into buffer

using ( FileStream fs = fiOpenRead() )

            {

bData = new byte[fiLength];

int nReadLength = fsRead( bData,0, (int)(fiLength) );

}

// 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 );

sqlCommParametersAdd( "@FileName", fiName );

sqlCommParametersAdd( "@FullName", fiFullName );

sqlCommParametersAdd( "@FileData", bData );

            // Get new file ID

SqlDataReader sqlReader = sqlCommExecuteReader();

if( sqlReaderRead() )

{

nNewFileID = intParse(sqlReaderGetValue(0)ToString());

}

            sqlReaderClose();

            sqlCommDispose();

if( nNewFileID > 0 )

            {

                // Add new item in list view

ListViewItem itmNew = lsvFileInfoItemsAdd( fiName );

itmNewTag = nNewFileID;

            }

        }

4而读出的代码如下:

// Get new file name

string strFullName =

dlgFBSaveSelectedPath;

if( strFullName[strFullNameLength - 1] != '//'

)

strFullName

+= @"/";

strFullName +=

lsvFileInfoSelectedItems[0]Text;

string strQuery = "SELECT FileData FROM FileInfo

"

+

" WHERE FileID = " + lsvFileInfoSelectedItems[0]TagToString();

SqlDataAdapter

sqlDAdapter = new SqlDataAdapter(strQuery,sqlConn);

DataSet

sqlRecordSet = new DataSet();

byte[] bData = null;

//Get file data from DB

try

{

sqlDAdapterFill(

sqlRecordSet, "FileInfo" );

foreach( DataRow dr in sqlRecordSetTables["FileInfo"]Rows)

{

if( dr["FileData"] != DBNullValue )

bData

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

}

}

catch(SqlException sqlErr)

{

MessageBoxShow(

sqlErrMessage );

}

catch

{

MessageBoxShow(

"Failed to read data from DB!" );

}

sqlRecordSetDispose();

sqlDAdapterDispose();

if( bData != null )

{

// Save file

FileInfo

fi = new FileInfo( strFullName

);

if( !fiExists )

{

//Create the file

using (FileStream fs = fiCreate())

{

fsWrite(

bData, 0, bDataLength);

}

}

else

{

//Create the file

using (FileStream fs =

fiOpenWrite())

{

fsWrite(

bData, 0, bDataLength);

}

}

}

数据库存储,其实是存储在服务器上的路径或的绝对地址

。它是一个字符串,所以数据库字段的类型可使用varchar可变的,长度不超过255。在前台调用时,需要将路径放置在img标签的src属性中,即可显示

access是微软发布的一款关系型数据库。access数据库保存的方法很多,可以通过vb,c++,php,asp等开发语言实现;也可以直接向access数据库插入进行保存。下面演示直接插入步骤:

1、打开access数据库,新建一张数据表(存储的字段类型选择:OLE 对象);

2、新建好,保存!然后再打开;右击图像控件,选择插入对象;

3、选中:由文件创建(F);然后点击浏览按钮,选择要保存的;最后,点击确定按钮;

4、同时按下Ctrl+S,对插入数据进行保存。保存成功后,控件会显示Package;

5、双击:控件(Package位置),会看到的预览;

6、这样,一张就保存到access数据库里去了。

以上就是关于php 数据库图片存储问题全部的内容,包括:php 数据库图片存储问题、sql数据库中如何存放图片相对路径(不用代码)、批量添加图片后怎么存入数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9495652.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存