자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다. 
  • 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)


indy를 이용한 파일 업로드가 낮은 버전(2010)에서 잘 됐었는데 XE3에서는 오류가 발생합니다.

 

낮은 버전에서 소스는 다음과 같습니다.


 

unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics,
  Controls, Forms, Dialogs, StdCtrls, IdMultipartFormData,
  IdHTTP;

type
  TForm3 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    function UploadInsImages: boolean;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);
begin
    UploadInsImages;
end;

function TForm3.UploadInsImages: boolean;
var
    PostData: TIdMultiPartFormDataStream;
    sReceive : TStringList;
    IdHTTP2: TIdHTTP;
begin
    sReceive := TStringList.Create;
    IdHTTP2 := TIdHTTP.Create;
    Result := True;
    PostData := TIdMultiPartFormDataStream.Create;
    try
        PostData.AddFormField('pID', '277' );
        PostData.AddFormField('imageFolder', 'img' );
        PostData.AddFile('file', Edit1.Text, 'Application/octet-stream');
        PostData.Position := 0;
        idHttp2.Request.ContentType := postData.RequestContentType;
        sReceive.text := idHttp2.Post('http://mydomain/up.asp', PostData);
        showmessage(sReceive.Text);
        if trim(sReceive.text) <> 'OK' then Result := False;
    finally
        FreeAndNil(PostData);
    end;
end;


end.


이 소스는 아주 잘 됩니다. 파일이 잘 올라 갑니다.

아쉽게도 이 소스가 XE3로 가면 그냥 업로드하면 오류가 생겨 약간 변경을 합니다.


 

unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics,
  Controls, Forms, Dialogs, StdCtrls, IdMultipartFormData,
  IdHTTP;

type
  TForm3 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    function UploadInsImages: boolean;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);
begin
    UploadInsImages;
end;

function TForm3.UploadInsImages: boolean;
var
    PostData: TIdMultiPartFormDataStream;
    sReceive : TStringList;
    IdHTTP2: TIdHTTP;
begin
    sReceive := TStringList.Create;
    IdHTTP2 := TIdHTTP.Create;
    Result := True;
    PostData := TIdMultiPartFormDataStream.Create;

    try

        PostData.AddFormField('pID', '277', 'utf-8', 'text/plain', '277');
        PostData.AddFormField('imageFolder', 'img', 'utf-8', 'text/plain', 'img');
        PostData.AddFile('file', Edit1.Text, 'Application/octet-stream');
        PostData.Position := 0;
        idHttp2.Request.ContentType := postData.RequestContentType;
        sReceive.text := idHttp2.Post('http://mydomain/up.asp', PostData);
        showmessage(sReceive.Text);
        if trim(sReceive.text) <> 'OK' then Result := False;

    finally
        FreeAndNil(PostData);
    end;
end;


end.


위 빨간 색 부분은 제가 엄청 많은 시간 고생한 끝에 찾아 낸 해법으로, 저렇게 해야 변수 값이 제대로 올라갑니다.

처음에는 변수 값이 제대로 안 오길래 무지무지 고생하다가 찾아내서 다 해결된 줄 알았습니다.

그런데, 업로드된 파일의 맨 첫 부분에 0D 0A 두 바이트가 삽입이 되는 심각한 문제가 발생했습니다.

Edit1 에는 업로드할 파일 이름이 들어 있습니다.

jpg 이미지를 업로드 하던, zip 파일을 업로드 하던 마찬가지입니다.

업로드된 파일의 첫번째 두 바이트가 0D 0A 입니다.

PostData.AddFile('file', Edit1.Text, 'Application/octet-stream'); 여기서 MIME 타입을 여러 가지로 바꿔 봤는데 결과는 같습니다.

XE3로 되면서 INDY 소스가 변경이 되면서 오류가 발생한 것일까요?

아니면 제가 파라미터 세팅을 잘못한 것일까요?

이틀을 헤매고 있습니다.

해법을 알려 주십시오.

감사합니다.

onehana@yahoo.com

번호 제목 글쓴이 날짜 조회 수
공지 [프로그래밍 강의] 2021.6~2021.12 관리자 2015.01.22 15766
공지 유용한 관련 사이트 관리자2 2014.03.20 54580
공지 본 게시판은 개발자 여러분들의 질문과 답변을 공유하는 공간입니다. 관리자 2012.01.10 97985
779 [XE8 출시세미나] 앱 애널리틱스 (App Analytics)에는 통계만 저장되나요? 아니면 각 사용자 고유의 정보도 저장되나요? [1] 관리자 2015.04.30 207
778 [XE8 출시세미나] 파이어몽키로 만들지 않은 안드로이드 앱을 델파이에서 로딩하고 데이터를 주고 받을 수 있나요? [1] 관리자 2015.04.30 289
777 [XE8 출시세미나] EMS Analytics와 AppAnalytics는 다른건가요? [1] Humphery 2015.04.30 158
776 [XE8 출시세미나] MDM(모바일 단말관리) 솔루션과 연동할 수 있나요? [1] Humphery 2015.04.30 210
775 [XE8 출시세미나] 파이어몽키 앱에서 안드로이드 라이브러리에 포함된 화면(Activity)를 연동하려면 어떻게 하나요? [1] Humphery 2015.04.30 355
774 [XE8 출시세미나] 멀티-디바이스를 지원하기 위해 FMX로 넘어가려고 합니다. 과도기에 VCL 과 FMX를 섞어서 사용할 수 있나요? 관리자 2015.04.30 247
773 [XE8 출시세미나] EMS 푸쉬에서 클라이언트에서 푸쉬메시지 수신확인이 가능한가요? [1] Humphery 2015.04.30 739
772 [XE8 출시세미나] 애플의 핼스킷과 연동할 수 있나요? [1] Humphery 2015.04.30 221
771 [XE8 출시세미나] XE8에서 리눅스를 지원하나요? [1] Humphery 2015.04.30 188
770 [XE8 출시세미나] 추가된 Native HTTP Client가 압축과 암호화를 지원하나요? [1] Humphery 2015.04.30 313
769 [XE8 출시세미나] 델파이로 웹개발도 할 수 있나요? [1] Humphery 2015.04.30 498
768 [XE8 출시세미나] 곧 출시되는 iWatch를 XE8에서 지원하나요? [1] Humphery 2015.04.30 219
767 [XE8 출시세미나] ImageList가 어떤부분이 강화됐나요? [1] Humphery 2015.04.30 295
766 [XE8 출시세미나] XE8에서 윈도우10 버전을 지원하나요? [1] Humphery 2015.04.30 351
765 [XE8 출시세미나] Zigbee, RFID등읜 인터페이스도 있는데 왜? 비콘을 먼저 지원한건가요? [2] Humphery 2015.04.30 367
764 [XE8 출시세미나] 비콘의 종류가 매우 다양한데요 엠바카데로에서 테스트한 케이스는 얼마나 되나요? [1] Humphery 2015.04.30 343
763 [XE8 출시세미나] 코드분석 기능이 유용한것 같은데 C++빌더에서는 언제 지원하나요? [1] Humphery 2015.04.30 290
762 [XE8 출시세미나] 안드로이드 앱에서 메모리 릭(누수)을 점검하려면 어떻게 하나요? [1] Humphery 2015.04.30 464
761 [XE8 출시세미나] 데이터스냅도 배포비용이 발생하나요? [1] Humphery 2015.04.30 230
760 [XE8 출시세미나] 물리엔진인 Box2D를 모바일에서도 사용할 수 있나요? [1] Humphery 2015.04.30 251