将任何文件保存到数据库中,仅将其转换为字节数组?

将文件转换为字节数组是将任何文件格式保存到磁盘或数据库var二进制列的最佳方法吗?

因此,如果有人要保存.gif或.doc / .docx或.pdf文件,是否可以将其转换为UFT8字节数组并将其作为字节流保存到db中?

回答:

由于未提及您的意思是什么数据库,因此我假设使用SQL Server。以下解决方案适用于2005年和2008年。

您必须使用VARBINARY(MAX)列之一创建表。在我的例子,我创建的表Raporty与列RaportPlik之中VARBINARY(MAX)列。

以下 :

public static void databaseFilePut(string varFilePath) {

byte[] file;

using (var stream = new FileStream(varFilePath, FileMode.Open, FileAccess.Read)) {

using (var reader = new BinaryReader(stream)) {

file = reader.ReadBytes((int) stream.Length);

}

}

using (var varConnection = Locale.sqlConnectOneTime(Locale.sqlDataConnectionDetails))

using (var sqlWrite = new SqlCommand("INSERT INTO Raporty (RaportPlik) Values(@File)", varConnection)) {

sqlWrite.Parameters.Add("@File", SqlDbType.VarBinary, file.Length).Value = file;

sqlWrite.ExecuteNonQuery();

}

}

public static void databaseFileRead(string varID, string varPathToNewLocation) {

using (var varConnection = Locale.sqlConnectOneTime(Locale.sqlDataConnectionDetails))

using (var sqlQuery = new SqlCommand(@"SELECT [RaportPlik] FROM [dbo].[Raporty] WHERE [RaportID] = @varID", varConnection)) {

sqlQuery.Parameters.AddWithValue("@varID", varID);

using (var sqlQueryResult = sqlQuery.ExecuteReader())

if (sqlQueryResult != null) {

sqlQueryResult.Read();

var blob = new Byte[(sqlQueryResult.GetBytes(0, 0, null, 0, int.MaxValue))];

sqlQueryResult.GetBytes(0, 0, blob, 0, blob.Length);

using (var fs = new FileStream(varPathToNewLocation, FileMode.Create, FileAccess.Write))

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

}

}

}

public static MemoryStream databaseFileRead(string varID) {

MemoryStream memoryStream = new MemoryStream();

using (var varConnection = Locale.sqlConnectOneTime(Locale.sqlDataConnectionDetails))

using (var sqlQuery = new SqlCommand(@"SELECT [RaportPlik] FROM [dbo].[Raporty] WHERE [RaportID] = @varID", varConnection)) {

sqlQuery.Parameters.AddWithValue("@varID", varID);

using (var sqlQueryResult = sqlQuery.ExecuteReader())

if (sqlQueryResult != null) {

sqlQueryResult.Read();

var blob = new Byte[(sqlQueryResult.GetBytes(0, 0, null, 0, int.MaxValue))];

sqlQueryResult.GetBytes(0, 0, blob, 0, blob.Length);

//using (var fs = new MemoryStream(memoryStream, FileMode.Create, FileAccess.Write)) {

memoryStream.Write(blob, 0, blob.Length);

//}

}

}

return memoryStream;

}

public static int databaseFilePut(MemoryStream fileToPut) {

int varID = 0;

byte[] file = fileToPut.ToArray();

const string preparedCommand = @"

INSERT INTO [dbo].[Raporty]

([RaportPlik])

VALUES

(@File)

SELECT [RaportID] FROM [dbo].[Raporty]

WHERE [RaportID] = SCOPE_IDENTITY()

";

using (var varConnection = Locale.sqlConnectOneTime(Locale.sqlDataConnectionDetails))

using (var sqlWrite = new SqlCommand(preparedCommand, varConnection)) {

sqlWrite.Parameters.Add("@File", SqlDbType.VarBinary, file.Length).Value = file;

using (var sqlWriteQuery = sqlWrite.ExecuteReader())

while (sqlWriteQuery != null && sqlWriteQuery.Read()) {

varID = sqlWriteQuery["RaportID"] is int ? (int) sqlWriteQuery["RaportID"] : 0;

}

}

return varID;

}

快乐的编码:-)

以上是 将任何文件保存到数据库中,仅将其转换为字节数组? 的全部内容, 来源链接: utcz.com/qa/412817.html

回到顶部