자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다. 
  • 제품설치/등록 오류 문의: 설치/등록 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 17204
공지 유용한 관련 사이트 관리자2 2014.03.20 56080
공지 본 게시판은 개발자 여러분들의 질문과 답변을 공유하는 공간입니다. 관리자 2012.01.10 99514
3139 [공유] FireDAC 로그인 창이 표시되는데요 어떻게 표시하지 않나요? file 험프리 2017.07.05 107
3138 [100%활용 세미나] RAD서버와 엔터프라이즈 커넥터를 구매하지 않고 사용가능한가요? 험프리 2017.11.10 107
3137 스프레쉬가 안 나타납니다. [1] file 거북이 2015.11.11 107
3136 paclientcore240.bpl를 다운받었는데 어떻게 사용하는지? [2] 화이부동 2016.09.03 108
3135 Insertbase XE7 사용하고 있는데요. 중첩 SELECT가 안되나요? [1] 짧굵 2016.11.02 108
3134 [10.2 도쿄 출시세미나] 리눅스용 소프트웨어 개발이 가능한가요? 그리고 리눅스용 소프트 웨어 개발이 가능하다면 GUI환경만 지원하나요? 아니면 터미널에서도 사용가능한가요? 험프리 2017.04.06 108
3133 무슨 에러인가요.. 해결이 안됩니다. file KayKim 2017.04.06 108
3132 [질문] Ribbon 의 MaxIcon을 Enabled = False 또는 Visible = false를 줄 수 없나요? 바람돌이 2016.05.11 108
3131 원격서버(호스팅서버)에 데이터스냅 미들웨어 배포하는 방법 운직 2020.01.31 109
3130 [마이그레이션 세미나] 데이터스냅에 대한 팁 또는 샘플자료 부탁합니다. 험프리 2015.11.24 109
3129 [시작하는 사람들을 위한 델파이 프로그래밍] 모듈 12 - Exercise 6 [1] 관리자 2016.05.10 110
3128 Medaiplayer 컴포넌트 사용시 영상 길이 제한이 있나요? eric 2016.09.22 110
3127 C++Builder Starter 버전 사용 시 에러 질문합니다. file 얼짱나 2017.08.10 110
3126 10.3 Starter Edition 관련 Overload 문제건 [2] 한태수 2019.09.30 110
3125 [베를린 10.1] 안드로이드앱에 Webbrowser 넣고 스트리밍 재생시.. 현동노 2019.12.15 110
3124 비콘 pky4437 2019.12.16 110
3123 [세미나: 데이터와 RAD] 데모를 이전 버전으로 돌려보는 것도 가능할까요? 험프리 2020.06.24 110
3122 XE10 에서 TOOL 파렛트에 openwire studio 컴포넌트를 사용할려면 어찌해야 하죠 [1] 손오공 2016.01.12 110
3121 Tbeacon 사용 [1] file ddhdhdhww2 2016.04.15 111
3120 [시작하는 사람들을 위한 델파이 프로그래밍] 모듈 13 - Exercise 4 [1] 관리자 2016.05.10 111