Почему файлы Apple DMG через FTP портятся? - PullRequest
0 голосов
/ 14 ноября 2008

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

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

Ответы [ 3 ]

1 голос
/ 14 ноября 2008

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

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

1 голос
/ 14 ноября 2008

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

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

0 голосов
/ 01 декабря 2008

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

...