자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다. 
  • 제품설치/등록 오류 문의: 설치/등록 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 15767
공지 유용한 관련 사이트 관리자2 2014.03.20 54582
공지 본 게시판은 개발자 여러분들의 질문과 답변을 공유하는 공간입니다. 관리자 2012.01.10 97992
779 설정, 로그인, 비번 등의 정보를 설정할 수 있는 기능이 필요합니다. [2] 시작하기 2019.02.15 545
778 SMTP 관련 문의 [1] 빌더유저 2019.02.15 136
777 델파이 10.2 안드로이드 SDK 추가 [1] 마로 2019.02.18 175
776 WINDOWS 10 에서 dbgrid 입력시 한글 첫자조합이 깨집니다. [1] 김하나 2019.02.19 403
775 DataSnap Unit 들 [2] file 델파인 2019.02.19 153
774 FMX TLang에서 Hard coded 된 문자열 변환 [1] VT 2019.02.20 118
773 [질문] 리오 10.3.1에서 FastReport를 설치할 수 없습니다. [2] 델사냥 2019.02.20 478
772 [공유] 파이어몽키 콤보박스의 글자 크기를 변경하고 싶습니다. 험프리 2019.02.20 751
771 [공유] 파이어몽키 버튼의 배경색상을 변경하고 싶습니다. 험프리 2019.02.20 428
770 RIO 리눅스 지원 질문 [1] 가나당 2019.02.21 113
769 IDE의 기본 파일 포맷을 UTF-8로 지정하고 싶습니다. [2] 개성산전 2019.02.21 424
768 C++ Builder 10.3 / 10.3.1 Clang에서 Code Insight 동작하지 않는 현상 질의? [3] 포비 2019.02.21 658
767 ipworks 더이상 무상으로 지원 안되나요? [2] 별땅땅쫑 2019.02.22 248
766 내전화번호 함수 10.3 에러 [2] file 델파인 2019.02.24 1302
765 설치 후 파이어몽키 데모 최초 실행시 오류 file 컴사랑 2019.02.25 148
764 XE10.2 Debug 오류 farseek 2019.02.26 100
763 FMX 에서 엑셀제어 [2] 100jk 2019.02.26 215
762 컴파일옵션 file 넓다란세상 2019.02.26 112
761 FireMonkey Form 화면 터치시 문제점. file victor 2019.02.27 1070
760 XE7 -> XE10.1 프로젝트 실행 시 오류 [1] 생각 2019.02.28 177