using FZ.File.Dapper;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Diagnostics;
using System.IO;
using System.Security.Cryptography;
using System.Text;
namespace
FZ.File.Logic
{
public
class
FileCoreService
{
public
bool CheckFilNameMD5(string filename, string md5str)
{
using (IDbConnection conn = DBConfig.GetSqlConnection())
{
try
{
string sql =
"SELECT COUNT(*) FROM BPM_tb_UploadFile WHERE [FileName]=@FileName AND FileMD5=@FileMD5 "
;
var
param =
new
DynamicParameters();
param.Add(
"@FileName"
, filename);
param.Add(
"@FileMD5"
, md5str);
var
count
= conn.ExecuteScalar(sql, param, null, 3600, CommandType.Text);
if
((int)
count
> 0)
{
return
true;
}
}
catch
(Exception ex)
{
throw
ex;
}
}
return
false;
}
public
bool CheckMD5(string md5str, System.Byte[] sourceStream)
{
var
jmd5 = GetMD5HashByByte(sourceStream);
if
(md5str == jmd5)
{
return
true;
}
return
false;
}
public
bool InsertFile(System.Byte[] sourceStream,string md5str,string filename)
{
bool sf = SaveFileToDisk(sourceStream,
"D:\\UploadFile\\"
, md5str);
if
(sf)
{
using (IDbConnection conn = DBConfig.GetSqlConnection())
{
try
{
string sql =
"INSERT INTO BPM_tb_UploadFile([FileName],[FileMD5],[FileSize],[Description]) VALUES('{0}','{1}',{2},'{3}')"
;
sql = String.Format(sql, filename, md5str, sourceStream.Length,
""
);
var
count
= conn.Execute(sql, null, null, null, CommandType.Text);
if
(
count
> 0)
{
return
true;
}
}
catch
(Exception ex)
{
throw
ex;
}
}
}
return
false;
}
private
string GetMD5HashByByte(System.Byte[] sourceStream)
{
MD5 md5 =
new
MD5CryptoServiceProvider();
byte[] result = md5.ComputeHash(sourceStream);
String ret =
""
;
for
(int i = 0; i < result.Length; i++)
ret += result[i].ToString(
"x"
).PadLeft(2, '0');
return
ret;
}
private
string GetMD5HashByFile(string fileName)
{
FileStream file =
new
FileStream(fileName, FileMode.Open);
MD5 md5 =
new
MD5CryptoServiceProvider();
byte[] result = md5.ComputeHash(file);
file.Close();
StringBuilder sb =
new
StringBuilder();
for
(int i = 0; i < result.Length; i++)
{
sb.Append(result[i].ToString(
"x2"
));
}
return
sb.ToString();
}
private
bool SaveFileToDisk(System.Byte[] sourceStream, string fileFullName)
{
bool result = false;
try
{
string savePath = Path.GetDirectoryName(fileFullName);
if
(!Directory.Exists(savePath))
{
Directory.CreateDirectory(savePath);
}
using (FileStream fsTarget =
new
FileStream(fileFullName, FileMode.Create, FileAccess.Write, FileShare.None))
{
fsTarget.Write(sourceStream, 0, sourceStream.Length);
fsTarget.
Flush
();
fsTarget.Close();
result = true;
}
}
finally
{
}
return
result;
}
private
bool SaveFileToDisk(System.Byte[] sourceStream, string filepath,string md5)
{
bool result = false;
string fileFullName = filepath + md5.Substring(0, 2) +
"\\"
+ md5.Substring(2, 2)+
"\\"
+ md5;
try
{
string savePath = Path.GetDirectoryName(fileFullName);
if
(!Directory.Exists(savePath))
{
Directory.CreateDirectory(savePath);
}
using (FileStream fsTarget =
new
FileStream(fileFullName, FileMode.Create, FileAccess.Write, FileShare.None))
{
fsTarget.Write(sourceStream, 0, sourceStream.Length);
fsTarget.
Flush
();
fsTarget.Close();
result = true;
}
}
finally
{
}
return
result;
}
public
System.Byte[] ReadFileByte(string filename, string md5str)
{
var
filepath =
"D:\\UploadFile\\"
+ md5str.Substring(0, 2) +
"\\"
+ md5str.Substring(2, 2) +
"\\"
+ md5str;
FileStream fileStream =
new
FileStream(filepath, FileMode.Open);
byte[] bytes =
new
byte[fileStream.Length];
fileStream.Read(bytes, 0, bytes.Length);
fileStream.Close();
return
bytes;
}
public
FileStream ReadFileStream(string filename, string md5str)
{
var
filepath =
"D:\\UploadFile\\"
+ md5str.Substring(0, 2) +
"\\"
+ md5str.Substring(2, 2) +
"\\"
+ md5str;
FileStream fileStream =
new
FileStream(filepath, FileMode.Open);
fileStream.Close();
return
fileStream;
}
}
}