새로운 글
새로운 덧글

자유롭게 질의 및 응답을 할 수 있는 게시판이며 어느 누구도 답변을 달아야만 하는 의무는 없습니다. 
  • 제품설치/등록/제품 오류 문의: 설치/등록 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

번호 제목 글쓴이 날짜 조회 수
공지 [프로그래밍 강의] 2019.8~2019.12 관리자 2015.01.22 9273
공지 유용한 관련 사이트 관리자2 2014.03.20 46769
공지 본 게시판은 개발자 여러분들의 질문과 답변을 공유하는 공간입니다. 관리자 2012.01.10 87749
204 XE2 Indy TCP Server에 델파이 Client외 타 Client 접근이 가능한가? [2] 툐툐툐 2013.07.09 6685
203 Canvas 설정 문제 [1] Feelple(고재철) 2012.11.30 6715
202 rtl160.bpl 파일을 찾을 수 없습니다. [1] 괴도코난 2013.12.11 6729
201 XE4의 FireDAC에서 데이터베이스 파일명이나 파일패스에 한글이 있으면 연결시 오류가 발생합니다. [2] 델사냥 2013.08.13 6742
200 DBExpress 질문 입니다. [3] 호달 2012.03.28 6749
199 RichEdit 관련해서 여쭤보고 싶습니다. [2] 한림대의료원정보기술센터 2013.11.15 6752
198 폼과 에디터 전환문제 [2] sdj 2013.01.11 6821
197 \Devic\Harddisk2\DR2 에러 file 명진 2013.03.21 6830
196 ios device deploy 오류 [3] awleeck 2013.11.17 6830
195 RadPHP XE2 한글문제.. [5] file netmast 2012.03.29 6867
194 델파이에서 MIME mutipartRelated protocol를 사용하려면 어떻게 해야하나요? fromstog 2013.01.29 6907
193 글을 적은지 한달이 다 되어 가는데.... Feelple(고재철) 2012.11.26 6913
192 Begin-end책 455페이지-28에 대한 궁금한 내용 [1] funny 2012.10.22 6925
191 png 이미지관련 문의 입니다. [1] 차돌이~ 2012.11.10 6932
190 DataSnap 채널에 관하여.. [1] 동이(박진동) 2012.11.16 6942
189 Tmemo 컨트롤에 대해서 sumily 2013.03.27 6942
188 RadPHP 평가판에서 정품으로 바꾸려는데 어떻게 하나요? 관리자 2012.07.20 6965
187 ActionMainMenuBar를 실행중 컨트롤하는 방법 나도몰라 2012.11.30 6970
186 Delphi Begin-End책을 따라하며 [1] funny 2012.09.28 7008
185 TAniThread 문제점 Feelple(고재철) 2012.10.29 7046



광고 모듈이 설치되어 있지 않아 실행을 중단합니다..