Почему файлы Apple DMG через FTP повреждаются?

Я пытаюсь передать по FTP некоторые файлы Apple DMG, если мы делаем это вручную через Safari или IE, он попадает в пункт назначения в порядке и без повреждений. Однако, если я использую бесплатный FTP-клиент, который мы с большим успехом использовали для zip и exe, или если я использую сценарий Powershell, который я закончил (адаптированный из ответа на вопрос другого потока стека), то я теряю около 1/2 МБ на файл размером 10,5 МБ, а dmg поврежден. У кого-нибудь есть предположения, что может пойти не так? Что я могу сделать, чтобы предотвратить это? До сих пор все, что я пробовал, это заархивировать dmg перед отправкой, и это ничего не дало. Опять же, все, кроме dmg, передается просто отлично.

К вашему сведению, я использую передачу в двоичном режиме, так что это не так .. спасибо, хотя


person Alex    schedule 14.11.2008    source источник
comment
Просто чтобы все знали. Должно быть, клиент, который я использовал, имел ту же проблему, что и мой сценарий PowerShell. Я использовал StreamReader для получения байтов для передачи, и он предполагал неправильную кодировку. Я переключился на BinaryReader, которого нет, и теперь он работает.   -  person Alex    schedule 14.11.2008
comment
Вы должны опубликовать это как ответ. Ответ на ваш собственный вопрос рекомендуется на SO.   -  person EBGreen    schedule 14.11.2008


Ответы (3)


Похоже, ваш клиент рассматривает файл dmg как текстовый файл. установите режим двоичной передачи в вашем ftp-клиенте, и он будет ftp как есть.

Я всегда думал, что режим передачи ascii в ftp просто глуп. Это вызывает больше проблем, чем оно того стоит.

person Marko    schedule 14.11.2008

Вы уверены, что все, кроме DMG, передается правильно? Похоже на проблему с кодировкой передачи. FTP поддерживает как двоичные типы передачи, так и типы передачи ASCII, в основном из-за исторического багажа. В старые добрые времена, когда полоса пропускания была пугающей, отсутствие старшего бита (который не используется в ASCII) позволяло сэкономить время. Однако, если у вас есть какие-либо байты с установленным битом, режим передачи ASCII потеряет их - следовательно, «двоичный» режим, который ничего не усекает.

Обычно для переключения режимов передачи используется команда «bin» или «ascii».

person Adam Wright    schedule 14.11.2008

Просто чтобы все знали. Должно быть, клиент, который я использовал, имел ту же проблему, что и мой сценарий PowerShell. Я использовал StreamReader для получения байтов для передачи, и он предполагал неправильную кодировку. Я переключился на BinaryReader, которого нет, и теперь он работает.

person Alex    schedule 01.12.2008