2010-11-28 6 views
2

그래서 현재 외부 파일에 일부 파일을 업로드하기 위해 HttpWebRequest을 사용하는 컨텍스트에서 HTTP 파일 업로드를 연구 중이며 일반적으로 몇 십 개의 대시가 경계로 사용되는 것을 볼 수 있습니다. 브라우저는 대개 무작위로 선택된 16 진수를 대시에도 추가하는 것 같습니다.HTTP 파일 업로드 경계 선택

이것은 말하기가 끔찍하게 clunky처럼 보입니다. (프로토콜에서 결함을 감히 말합니까?). 내 특정 유즈 케이스에는 내가 사용하는 경계를 포함 할 수있는 데이터가 포함되어 있으므로 (업로드 한 데이터가 일종의 덤프 임) 업로드해야하는 파일이 100 % 확실해야합니다. 무작위로 숫자를 고르는 것은 실제 충돌 가능성이 10 억에 1이라 할지라도 나에게 용인되지 않습니다. 대상 스크립트가 일부 오류를 발견하면 다른 무작위로 선택한 경계로 다시 시도하는 것은 내가 좋아하는 것이 아닙니다.

내 선택한 전체 경계선이 존재하지 않는지 확인하기 위해 전체 파일 (대개 수십 메가 바이트)을 스캔하지 못하게하는 유일한 방법은 무엇입니까? 업로드와 함께 여러 가지 다른 요청을 수행해야하므로 I/O 패널티를 피하기 위해 전체 파일을 검색하지 않으려합니다.

크기 매개 변수가 있습니까? 그렇다면 전달할 수있는 매개 변수가 있습니까?

무엇이 누락 되었습니까? 원격 API를 변경하는 것은 옵션이 아니므로 Base64로 인코딩하거나 일종의 이스케이프 문자를 추가하는 것은 불가능합니다.

답변

-1

"무엇이 없습니까?"

상식? : P

업로드하는 파일을 읽은 다음 임의의 바이트를 수정하고 업로드하십시오. 파일 업로드시 재발생하지 않는 범위가 생겼습니다. 그러나 실제로, 그것은 무의미합니다. 예를 들어 10k 경계를두면 충돌이 발생할 가능성이 희박 해지고 바이트 충돌이 발생할 때까지 인류가 사라질 가능성이 훨씬 더 커집니다.

+0

내가 상식을 가지고 있다고 말하면 처음에는이 경계 역학에 의문을 제기하지 않을 것입니다. ;) 분명히 파일 화 된 경계는 그 자체로는 꽤 무의미한 사건입니다. – Stigma

+0

OP가 말하기 때문에, 당신은 이것에 대해 걱정할 필요가 없습니다. 예를 들어 파일을 읽고 MD5 해시를 생성하여이를 경계로 사용할 수 있습니다. 또한 WebClient를 사용하여 멀티 파트 업로드를 수행하는 방법을 보여주는 http://ferozedaud.blogspot.com/2010/03/multipart-form-upload-helper.html을 참조하십시오. 업로드 스트림 형식에 대한 대부분의 세부 정보를 처리합니다. – feroze

+0

@feroze - 경계로 MD5 해시를 사용하면 어떤 이점이 있는지 알지 못합니다 ... 데이터의 해시가 데이터에서 발생하지 않는다는 것을 의미하는 것은 아닙니다 (OP의 포인트 임) – userx

2

경계에 대한 데이터를 스캔하는 것보다 더 빨리 방법을 알지 못합니다. 대다수의 애플리케이션에서, 나는 이것이 파이어 폭스의 소스를 다운로드하고 살펴볼 것이라고 믿는다.

  • 데이터의 경계를 검색 (예 -------- saDad8g3 -------- 데이터에서 발생할 이상적으로 가능성이없는)가 생성
  • 임의의 경계가
  • 을 포함하고
      경계가 발견되면
    1. , 1

    내 생각은 경계가 발견되면, 코드가 생성 된 임의의 경계를 변경하고 다시 스캔 것입니다 돌아갑니다.

    3 단계를 다음과 같이 변경하여 최적화 할 수 있습니다. 경계가 발견되면 데이터의 다음 바이트가 아닌 경계 끝에 바이트를 추가하고 데이터 검색을 계속합니다. 당신이 정말로 응용 프로그램이 당신의 경계에 대한 업로드를 스캔하는 것은 문제가 높은 성능 요구 사항을 가지고 있다고 생각 경우

    ,이 대안을 추천 할 것입니다 :

    1. 임의의 경계, 이상적으로 가능성이 다시는 (생성 데이터에 발생)
    2. 데이터가 있는지 확인하고 충돌 가능성이 매우 낮다고 가정하고 업로드하지 마십시오.
    3. 서버 오류가 발생하면 1 단계로 돌아가서 데이터에서 ALSO가 아닌 새로운 경계를 다시 만듭니다. 다시 시도하십시오.

    내 생각 엔 비록 서버에서 400 오류가 업로드 경계의 잘못, 또는 뭔가 다른 경우 분류해야하는 것보다 간단하게 업로드하기 전에 데이터를 검사하는 것이 좋습니다 것입니다.

    0

    임의의 숫자 경계에 대한 모든 70 characters를 사용하여 1GB의 데이터가 충돌 할 확률은 10 억에서 1이 아니라 10¹¹7에서 1과 같습니다. 유성 파업으로 인해 다음 yoctosecond에서 왼쪽 분홍색 발가락을 잃을 가능성이 더 큽니다. 그게 내가 두려워하는 것보다 자신감을주지 않는다면 아무 것도하지 않을 것이다 :). 사실상 동일한 질문 here에 대한 내 대답을 읽으십시오.