Я пытаюсь разработать средство обновления файлов для некоторых файлов в папке, чтобы синхронизировать FTP-сервер с локальной папкой, используя Java на клиенте и PHP на стороне сервера.
На стороне сервера я вычисляю md5_file($filename)
для файла и возвращая каждый из них в формате JSON.
На Java я сначала проверяю, существует ли файл в локальной папке. Если файл существует, то я проверяю контрольную сумму MD5, чтобы убедиться, что файл точно такой же, как и онлайн.
MD5 не совпадает при проверке файлов .txt или .lua. Это нормально при проверке других типов файлов, таких как файлы текстур .dds.
MD5, который я использую на Java, таков:
private String md5(File f) throws FileNotFoundException, NoSuchAlgorithmException {
MessageDigest digest = MessageDigest.getInstance("MD5");
InputStream is = new FileInputStream(f);
byte[] buffer = new byte[8192];
int read = 0;
try {
while( (read = is.read(buffer)) > 0) {
digest.update(buffer, 0, read);
}
byte[] md5sum = digest.digest();
BigInteger bigInt = new BigInteger(1, md5sum);
String output = bigInt.toString(16);
return output;
}
catch(IOException e) {
throw new RuntimeException("Unable to process file for MD5", e);
}
finally {
try {
is.close();
}
catch(IOException e) {
throw new RuntimeException("Unable to close input stream for MD5 calculation", e);
}
}
}
Например, для файла description.lua со следующим содержимым:
livery = {
{"KC-130_fusel", 0 ,"KC-130_map_fus",false};
{"KC-130_wing", 0 ,"KC-130_map_wingS",false};
{"KC-130_wing_2", 0 ,"KC-130_map_wings_2",false};
{"KC-130_notes", 0 ,"KC-130_notes_empty",true};
{"KC-130_FPod", 0 ,"kc-130_map_drg",false};
}
name = "Spain ALA 31 TK.10-06"countries = {"SPN"} -- and any others you want to add
PHP md5_file ($ filename) = d0c32f9e38cc6e1bb8b54a6aca4a0190
JAVA md5 (файл) = 08bf57441b904c69e9ce3ca02a9257c7
Я пытался найти связь между этими двумя кодами, чтобы увидеть, что имеет значение, но не нашел ни одного. Я проверил, как 10 сценариев md5 для Java, и все они дают одинаковый результат.
Есть ли способ, как я могу это исправить?
РЕДАКТИРОВАТЬ: Решение, данное в первом комментарии: Измените тип передачи на FTP-клиенте на двоичный, чтобы избежать изменения текстовых файлов в кодировку ASCII, изменения их длины и md5.
Задача ещё не решена.
Других решений пока нет …