FTP Upload Corrompendo PDF

2

Eu tenho um arquivo PDF de 100kb que chamaremos de Test.pdf . Estou usando o FTP para colocar Test.pdf no meu site. No entanto, o PDF está corrompido quando chega ao site. Então, como um teste de diagnóstico, eu corri:

$ md5sum Test.pdf
[md5sum a]
$ [ftp upload Test.pdf]
$ [ftp download Test.pdf]
$ md5sum Test.pdf
[md5sum b]

Então, em algum momento do processo de upload, o arquivo está sendo corrompido! Isso está me desconcertando. Eu nunca tive esse problema com qualquer outro tipo de arquivo. Eu também tentei usar o cliente de upload manual do meu provedor de site, mas encontrei o mesmo problema. O que está acontecendo aqui?

    
por Newb 28.12.2013 / 01:24

2 respostas

5

Você já respondeu, mas acho que posso fazer melhor que Apparently certain types of files need to be uploaded in binary .

Primeiro, algumas pequenas informações básicas:

1: Computadores, bits e bytes.

A menor parte da informação em um computador é um pouco. Um bit é verdadeiro ou falso,) ou 1, alta voltagem ou terra, ...

Os bits são agrupados em pequenos conjuntos. Para quase todos os computadores modernos em grupos de oito. Nós chamamos isso de byte.

Um conjunto de 8 bits / 1 bytes, pode ter 256 valores diferentes, a partir do       00000000 significado 0
      00000001 significado 1
      00000010 significado 2
      00000011 significando 3 (ambos 2 + 1 são definidos)
      00000100 significado 4
      ...
      11111111 significado 255

2: ASCII.

ASCII é um conjunto de 128 caracteres, numerados de 0 a 127. Você só precisa de 7 bits para isso. Nos velhos tempos, isso era tudo o que você precisava para se comunicar. Apenas a letra regular de 26 no alfabeto ocidental, o número de 0 a 9 e alguns códigos especiais aparecem como 7: Toque a campainha ou bipe.

Hoje em dia definimos muito mais personagens. Nós usamos UTF-16 e unicode, permitindo idioma chinês, japonês, da direita para a esquerda, etc. etc. nos velhos tempos nós ainda não tínhamos apoio para isso em lugares comuns.

3: Por último: a largura de banda é / era cara.

Enviamos todos os 8 bits de um bit para um destino quando você sabe que só precisa de 7 deles para representar o texto? Se você fizer as coisas de uma maneira inteligente, você pode economizar 1/8 de largura de banda.

Isso pode não parecer tanto para uso hoje, mas na época em que a Europa para os EUA conectou uma linha de discagem de 1200 bauds (ou seja, cerca de 0,1 KB / s!) ajudou um pouco.

Então, suponha que eu queira escrever "Olá".

Eu posso procurar isso na tabela ASCII e descobrirei que seu computador armazenaria isso em quatro bytes contendo:

H        e        l        l        o
01001000 01100101 01101100 01101100 01101111  

Note que os primeiros bits de todas as letras são 0. Eu também lembro dessa parte:

H        e        l        l        o
 1001000  1100101  1101100  1101100 1101111  

O primeiro exemplo tem 32 bits (4 bytes, cada 8 bits de informação). O segundo exemplo tem apenas 28 bits. É mais eficiente.

Isso torna o método preferido de transferência de texto. No entanto, deixando de fora o primeiro bit vai quebrar tudo o que não é texto. Assim, o protocolo FTP foi projetado com duas opções: modo ASCII (eficiente para texto) e modo BINARY (transferência como está).


OK, com tudo o que se sabe:

Você transferiu arquivos binários (por exemplo, PDFs) no modo ASCII, que não transmitiu todas as informações. Assim, os arquivos resultantes chegaram mutilados no destino

Para transferir qualquer coisa, exceto o texto antigo, use o comando 'bin' no prompt do FTP ou marque a opção 'bin' de usar uma GUI.

Espero que responda o "O que está acontecendo aqui?" :)

    
por 28.12.2013 / 02:09
1

O problema é que eu estava fazendo o upload de Test.pdf em ascii mode , não binary mode . Aparentemente, certos tipos de arquivos (por exemplo, .pdf, .zip) precisam ser carregados em binário, em vez de no modo ascii. (Isso presumivelmente tem algo a ver com a representação em nível de sistema do arquivo.) Isso foi facilmente corrigido alterando o modo de upload para binário no ftp, usando o comando binary , como tal:

$ ftp [myserver]
ftp> binary
ftp> put Test.pdf

Aqui é uma referência útil.

    
por 28.12.2013 / 01:39

Tags