자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다. 
  • 제품설치/등록 오류 문의: 설치/등록 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 19787
공지 유용한 관련 사이트 관리자2 2014.03.20 58725
공지 본 게시판은 개발자 여러분들의 질문과 답변을 공유하는 공간입니다. 관리자 2012.01.10 102303
139 델파이 10.4에서 10.3.3 에서 되던 fcm push가 안됩니다. [3] 델파이_사랑 2020.12.04 464
138 Delphi 10.4.1 Sydney - 위치변경후..주소변환 오류문의 [1] silkroad99 2020.12.04 318
137 Multi Tenant 모드일때 REST 요청시 401에러 [1] 초보개발자 2020.12.07 231
136 FMX ICON파일 왜 안되죠? [1] 서준아빠 2020.12.11 309
135 macOS Big Sur 에서 [DCC Error] E2597 Undefined symbols for architecture arm64: 에러 나옵니다. file 텔로스김 2020.12.17 256
134 갤럭시 s20 삼성ui3.0 업데이트 후 앱 파이어몽키 앱 튕깁니다.?? kerry 2020.12.21 599
133 Delphi7 TcontrollScrollbar 관련 질문 [2] temp 2020.12.22 242
132 구글 플레이스토어에 델파이 10.3.3 으로 만든 앱 배포 등록시 오류 밤바야 2020.12.28 184
131 DATASNAP 사용 시 macOS에서 한글깨짐 문제 [1] file 8585 2020.12.29 231
130 TSQLQuery 사용시 operation not supported [1] 영들사랑 2020.12.30 421
129 함수 동작중 서브폼 활성화시 먹통 현상 [1] 포세가이 2020.12.31 505
128 10.4.1 에서 iOS Simulator 연결 시 디버그 모드만 동작되고 릴리즈 모드는 죽어버립니다. [2] file 막스뮐러 2021.01.04 464
127 ClientDataSet1.Data 문의드립니다 [2] 가나다 2021.01.06 1647
126 MDI, CHILD 구성 DLL Form Close [1] 가나다 2021.01.11 1342
125 TComport 64bit도 지원가능한가요? [2] 야크 2021.01.12 416
124 [문의] C++ Builder 10.x.x 로 개발된 프로그램 재배포는 어떻게합니까? [2] file inhi 2021.01.14 311
123 TwineCompile 에러가 발생 했는데, 수정은 어떻게 하나요? 하루 2021.01.19 563
122 FireDac 쿼리 실행시 가끔 발생되는 Access Violation을 못잡겠습니다.. [1] 육식육식 2021.01.20 261
121 모바일에서 이미지 로딩시, 사진 방향이 바뀌는 이유 [3] delphiman 2021.01.26 388
120 CodeSite 질문입니다. [2] BD 2021.01.27 242