Я создаю функцию для приложения, чтобы сохранить файл на веб-сервере, сохраняя данные о файле на SQL Server. Я генерирую хэш SHA256 и сохраняю его как BINARY (32), а затем загружаю файл на сервер WebDav с помощью HTTPClient. Позже, когда я хочу просмотреть файл в приложении, я делаю запрос GET, загружаю файл и проверяю хеш SHA256 с сохраненным хешем. Он не совпадает :( Почему?
Я попытался проверить хэш на сервере и на локальной машине, и он тоже не совпадает. Я провел тонну исследований и убедился, что я не былНет хеширования имени файла (вы можете увидеть код ниже).
public static byte[] GetSHA256(string path) {
using (var stream = File.OpenRead(path)) {
using (var sha256 = SHA256.Create()) {
return sha256.ComputeHash(stream);
}
}
}
Для загрузки файла:
public async Task<bool> Upload(string path, string name) {
var storedHash = GetSHA256(path/name);
//Store this hash in a database, omitted for brevity
using (var file = File.OpenRead(path)) {
var content = new MultipartFormDataContent();
content.Headers.ContentType.Media = "multipart/form-data";
content.Add(new StreamContent(file));
var result = await HttpClient.PutAsync(uri, content);
}
}
Для загрузки:
var result = await HttpClient.GetAsync(uri);
using (var stream = await result.Content.ReadAsStreamAsync()) {
var fileInfo = new FileInfo("TestFile");
using(var fileStream = fileInfo.Open(FileMode.CreateNew, FileAccess.ReadWrite, FileShare.Delete)) {
await stream.CopyToAsync(fileStream);
}
}
var downloadedFileHash = GetSHA256("TestFile");
//check if downloadedFileHash matches the storedHash by comparing byte[] length and content with for loop.
Iожидать, что хеш будет совпадать. Я знаю, что мне не хватает нескольких using
операторов и другого кода, но я для краткости пропустил кучу.
РЕДАКТИРОВАТЬ: Хеши для загруженных файлов остаются прежними, поэтому проблемане загружает, а загружает. Я загружал одни и те же файлы несколько раз, но получаю разные хеш-коды для каждого. Но разные хеш-коды остаются постоянными.