FTP 서버에서 다운로드하면 파일이 손상됩니다.

FTP 서버에서 다운로드하면 파일이 손상됩니다.

현재 FTP 서버에서 일부 파일을 다운로드할 때 문제가 발생했습니다. 해당 파일이 손상되었습니다. 문제에 대한 소개는 다음에서 볼 수 있습니다.이 SO 질문(문제가 내 Qt 기반 소프트웨어에 있다고 생각했지만 지금은 서버에 있다고 확신합니다.)

상황은 다음과 같습니다. 8개의 파일을 FTP 서버에 복사하고 나중에 QNetworkAccessManager가 포함된 Qt 기반 소프트웨어를 사용하여 다운로드하고 싶습니다. 그렇게 하려고 노력하면서 나는 다음과 같은 사실을 발견했습니다.모든 길8개 파일 중 3개 파일이 동일한 방식(동일한 잘못된 파일 크기)으로 손상됩니다(해시 확인 및 파일 크기 모두 사용). 문제는 내 소프트웨어에 있는 것이 아닙니다. Mozilla와 Chrome을 모두 사용하여 파일을 다운로드하면정확한같은 오류. 전체 과정은 다음과 같습니다.

  1. Linux Ubuntu 폴더에는 8개의 파일이 있습니다. 파일 크기는 괜찮습니다.
  2. 8개의 파일이 Windows 7 폴더로 전송됩니다.
  3. 파일은 FileZilla를 사용하여 FTP 서버로 전송됩니다. 완료되면 FileZilla는옳은8개 파일 각각의 크기입니다.
  4. 파일은 브라우저와 QNetworkAccessManager가 포함된 Qt 기반 앱을 모두 사용하여 Windows의 Linux Ubuntu awa에서 모두 다운로드됩니다. Windows에서는 FileZilla를 통해서도 파일이 다운로드됩니다.
  5. 동일한 3개의 파일이 손상되었습니다. - 서로 다른 크기로 확인되었습니다.

해당 SO 질문에서 문제를 논의한 후 문제가 서버 측에 있을 수 있다고 제안되었습니다. 웹에서 좀 조사해서 알아냈어요이것,이것그리고이것. 제안 사항은 FileZilla의 다양한 크기 계산(대부분의 경우 Windows 및 Linux 크기 계산을 사용하기 때문에 어렵습니다)과 "바이너리 또는 ASCII 전송 문제"입니다.

두 번째에 관해서도, 문제가 있는 파일 3개 중 2개는 소프트웨어이고 다른 하나는 바이너리 파일이지만, 네 번째 파일도 역시 바이너리이고 전혀 문제가 없기 때문에 이것이 사실이라고 믿기 어렵습니다. (그리고 다른 3개 파일은 .tar.gz로 압축되어 있는데 역시 바이너리라고 생각되지만 제대로 다운로드됩니다.)

그러나 이것이 사실이라고 가정해 보겠습니다. 다운로드를 위해 두 가지 방법 중 하나를 지정해야 합니다. 그러면 브라우저를 통해 다운로드할 때와 QNetworkAccessManager를 통해 다운로드할 때 모두 어떻게 이 작업을 수행할 수 있습니까?

만약 그렇지 않다면 어떻게 될까요? 그렇다면 무슨 일이 일어나고 있는 걸까요?

답변1

글쎄요, 우리가 문제를 찾아낸 것 같습니다. 그리고 그것은 결국 ASCII 또는 바이너리 문제였습니다.

문제가 처음 나타났을 때 전송 모드가 "auto"인 FileZilla를 통해 FTP 서버로 파일을 보내고 있었습니다. FileZilla로 다운로드할 때 전송도 "자동"으로 설정되어 문제가 발생했습니다. 브라우저와 Qt의 QNetworkAccessManager에서 사용하는 전송 모드를 알 수 없으며 둘 다 문제가 있는 상태로 반환되었습니다.

그래서 우리 팀은 바이너리를 사용하여 FileZilla로 다운로드를 테스트했습니다. 실패하다. 그런 다음 ASCII를 사용하여 다운로드했습니다. 성공했습니다. 이제 우리는 서버에서 파일을 삭제하고 ASCII로 문제가 있는 파일 중 하나를 업로드하고 FileZilla를 사용하여 ASCII로 다운로드했습니다. 성공했습니다. 그런 다음 바이너리를 사용하여 업로드하고 FileZilla를 사용하여 바이너리를 사용하여 다운로드했습니다. 성공했습니다. 하지만 내 Qt 기반 앱으로 다운로드할 때 실패합니다. 그래서 우리는 QNetworkAcessManager가 ASCII를 사용하여 다운로드한다고 추측했습니다. 이는 바이너리로 다운로드하도록 재구성하거나 ASCII를 사용하여 FTP 서버에 파일을 업로드해야 함을 의미합니다. 이 나중 옵션을 사용하면 파일 크기를 계산할 때 문제가 발생하므로 가능하면 첫 번째 솔루션을 사용하겠습니다. (바이너리로 수행하는 것으로 보이는 브라우저에서도 성공적으로 다운로드했습니다.)

이것이 바로 그것입니다. QNetworkAccessManager는 ASCII를 사용하여 다운로드하는 것 같습니다. 따라서 FTP 서버에 업로드된 모든 파일은 나중에 QNetworkAcessManager를 사용하여 다운로드해야 하는 경우 ASCII로 수행되어야 합니다.

편집: 내 실수입니다. QNetworkAccessManager는 실제로 ASCII가 아닌 바이너리를 사용하여 다운로드합니다. 물론 이로 인해 문제를 해결하는 방법에 대한 해석을 재평가해야 하지만 ASCII 또는 바이너리가 모든 혼란의 원인이라는 것은 여전히 ​​​​분명합니다.

편집 2: 문제가 해결되었습니다. 기본적으로 해야 할 일은 데이터가 FTP 서버에 바이너리로 업로드되도록 하는 것입니다. QNAM은 바이너리로 다운로드하므로 데이터는 괜찮을 것입니다. 재미있는 점은 이 이음새가 Linux에서만 작동한다는 것입니다. Windows에서 Qt 기반 다운로드 앱을 실행하면 문제가 지속됩니다.

편집 3: Windows 문제가 해결되었습니다. 이 문제와 관련이 없는 구성 문제였습니다.

관련 정보