2015-09-15 2 views
0

Я загрузив файл с помощью HTML5 и вычислить md5 на стороне клиента (JavaScript) Затем на стороне сервера (обработчик) Я вставив файл ломтики в таблице, как это:Вычислить Md5 на стороне сервера

public void WriteBlobsToDB(byte[] buffer,int id) 
    { 
     File_Data fl = new File_Data(); 
     fl.FileId = id; 
     fl.FileChunks = buffer; 
     try 
     { 
      WiFileData.InsertOnSubmit(fl); 
      dc.SubmitChanges(); 
     } 
     catch (ExecutionEngineException e){throw e;} 
    } 

, а затем, когда все файлы ломтики сохраняется в базе данных, я стараюсь читать их объявление сохранить их в byte[] allData и вставить его в другой таблице:

public void WriteBlobs(int id, string fileName,int count,byte[] allData) 
{ 
    List<chunkInfo> listOfChunks; 
    File_Data fd = new File_Data(); 
    File_List fl = new File_List(); 
    try 
    { var chunks = (from c in FileData 
         where c.FileId == id 
         orderby c.Id ascending 
         select new chunkInfo 
         { Id = c.Id, 
         ChunkData = c.FileChunks.ToArray() 
         }); 
     listOfChunks = chunks.ToList(); 

     foreach (chunkInfo sChunk in listOfChunks) 
     { fl.FileId = id; 
      fl.FileName = fileName; 
      int dstoffset = count * sChunk.ChunkData.Length;// count is set to 0 at teh beggginning 
      Buffer.BlockCopy(sChunk.ChunkData, 0, allData, dstoffset, sChunk.ChunkData.Length); 
      count++; 
     } 
     int l = allData.Length; 
     fl.FileData = new Binary(allData); 
     FileList.InsertOnSubmit(fl); 
     dc.SubmitChanges(); 

    } 
    catch (Exception){throw;} 
} 

код работает, и я храню данные в база данных и allDatasize - это тот же размер моего файла в en д. Мне просто нужно проверить, записаны ли сохраненные данные в поле Filedata в таблице. Как я могу вычислить md5 для него и сравнить его?

Благодаря

ответ

1

Если вы спрашиваете, как вы в состоянии сделать это чисто в SQL Server, вы могли бы просто использовать функцию HASH_BYTES, что-то вроде этого:

select stored_md5_column, hashbytes('MD5', Filedata) as md5hash 
from your_table 
where stored_md5_column != hashbytes('MD5', Filedata); 

В зависимости от того, как вы» повторно сохраняя значение «stored_md5_column», вам может потребоваться передать результат хэш-байтов на что-то другое, чтобы получить правильное сравнение равенства.

Если вы вместо этого хотите выполнить проверку/подтверждение в C#, вместо этого вы хотели бы использовать в MD5 class и что-то вроде этого после того, как у вас есть ALLDATA буфер массив заполнен:

using (var md5Obj = MD5.Create()) 
{ 
    var md5Hash = md5Obj.ComputeHash(allData); 
} 

Этот предполагает, что ваш allData является байтовым массивом (я не могу сказать из вашего кода). Если это не байтовый массив, вам сначала нужно преобразовать его в стандартный байтовый массив или поток, чтобы перейти к методу MD5 ComputeHash.

+0

нет, мне нужно это сделать с помощью Linq – laila

+0

@laila, см. Обновленное редактирование для кода C#/ссылки – chadhoc

Смежные вопросы