/// <summary> /// Загрузка файла в БД /// </summary> /// <param name="fileName">Полный путь и имя файла для загрузки в БД</param> public void Upload(String fullFileName) { SqlConnection CN = MiscFunction.OpenConnection(_connectionString); RIPEMD160 myRIPEMD160 = RIPEMD160Managed.Create(); String fileName = MiscFunction.GetFileName(fullFileName); FileStream fs = new System.IO.FileStream(fullFileName, FileMode.Open, FileAccess.Read); Byte[] imageData = new Byte[fs.Length]; fs.Read(imageData, 0, Convert.ToInt32(fs.Length)); //SHA-1 byte[] hashValue; hashValue = myRIPEMD160.ComputeHash(fs); string result = BitConverter.ToString(hashValue).Replace("-", String.Empty); //System.IO.File.WriteAllText("C:\\Users\\Марсель\\Documents\\Uploader\\Updater\\bin\\Debug\\TestFile2.txt", result); fs.Close(); String strSQL; if (!ChekExists(CN, fileName)) {//INSERT strSQL = "INSERT INTO Srv_ProgramFile (version, name, author, binaryData, Date, hashCode) " + "VALUES (1, @name, @autor, @binaryData, @Date, @hashCode)"; } else {//UPDATE strSQL = "UPDATE Srv_ProgramFile SET version=version+1, name=@name, author=@autor, binaryData=@binaryData " + "WHERE name=@name"; } SqlCommand cmd = new SqlCommand(strSQL, CN) { CommandTimeout = 60 }; cmd.Parameters.Add(new SqlParameter("@name", SqlDbType.NVarChar, 128)).Value = fileName; cmd.Parameters.Add(new SqlParameter("@autor", SqlDbType.NVarChar, 50)).Value = System.Security.Principal.WindowsIdentity.GetCurrent().Name; cmd.Parameters.Add(new SqlParameter("@binaryData", SqlDbType.Image)).Value = imageData; cmd.Parameters.Add("@Date", DateTime.Now.Date); cmd.Parameters.Add("@hashCode", SqlDbType.NVarChar, 50).Value = result; cmd.ExecuteNonQuery(); CN.Close(); }
/// <summary> /// Загрузка файла из БД и сохранение под другим именем /// </summary> /// <param name="fileName">Файл для загрузки из БД</param> /// <param name="fullFileName">Полный путь и имя файла для сохранения</param> private void Download(String fileName, String fullFileName, DownloadProgress progress) { SqlConnection connection = MiscFunction.OpenConnection(_connectionString); var strSql = "SELECT binaryData FROM Srv_ProgramFile WHERE name = '" + MiscFunction.GetFileName(fileName) + "'"; var cmd = new SqlCommand(strSql, connection); SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess); reader.Read(); var fs = new FileStream(fullFileName, FileMode.Create, FileAccess.Write); var writer = new BinaryWriter(fs); int startIndex = 0; const int bufferSize = 1000; var outByte = new byte[bufferSize]; long retval = reader.GetBytes(0, startIndex, outByte, 0, bufferSize); while (retval == bufferSize) { writer.Write(outByte); writer.Flush(); startIndex += bufferSize; retval = reader.GetBytes(0, startIndex, outByte, 0, bufferSize); progress.InicrementDownloadedSize((int)retval); } writer.Write(outByte, 0, (int)retval); writer.Flush(); writer.Close(); fs.Close(); reader.Close(); connection.Close(); }