새로운 글
새로운 덧글

자유롭게 질의 및 응답을 할 수 있는 게시판이며 어느 누구도 답변을 달아야만 하는 의무는 없습니다. 
  • 제품설치/등록/제품 오류 문의: 설치/등록 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 6458
공지 유용한 관련 사이트 관리자2 2014.03.20 43803
공지 본 게시판은 개발자 여러분들의 질문과 답변을 공유하는 공간입니다. 관리자 2012.01.10 85030
70 TTouchKeyboard 질문입니다. [2] 나도몰라 2012.04.04 9638
69 바로 밑에 2010의 xe2 컨버팅에서 저도 이상한점이... [1] 나도몰라 2012.04.24 9644
68 씨리얼 통신용 컴포넌트 추천 부탁 드립니다. [1] 박범용 2012.01.26 9660
67 파이어몽키에서 기존에 작성된 VCL이나 DLL을 사용할 수 있을까요? [3] Happycube 2012.05.26 9698
66 델파이 XE 한영전환 문제 확인 해 주세요 [1] memc 2012.08.09 9766
65 F1027 에러메시지가 뜨는데 조치방법을 가르쳐 주세요 file 박병일 2012.01.27 9844
64 delphi xe에 있는 인디컴포넌트 이용시 에러에 대한 문의 [1] superman 2012.06.10 9873
63 c++빌더 2012 XE2 컨버팅 질문입니다. [1] 조우상 2012.04.23 9906
62 서버 tcp/ip 연결에 관한 문의 드립니다 [4] 환준러브맘 2012.05.31 9914
61 Excel 2007 제어 관련하여... [1] ideveloper 2012.11.30 9929
60 델파이XE3 - firemonkey2에서의 Bitmap Pixel 조작은 어떻게 해야 하나요? [1] Happycube 2012.10.09 9933
59 델파이xe2 아이콘 128 사이즈 등록 가능한가요? 프리스켄 2012.05.16 9948
58 [인트라웹] 지원되는 인터넷익스플로러 인데도 "unknown browser type"이라는 메시지가 나옵니다 [1] 관리자 2012.05.09 9962
57 델파이 6.0에서 XE2로 업그레이드 할 경우, 실행파일의 크기에 변동이 있나요? 관리자 2012.05.22 9989
56 Delphi2009에서 웹서비스 서버와 웹서비스 클라이언트 만들기 박범용 2012.01.27 9990
55 BDE administrator에 대한 문의입니다. [3] 오상헌 2013.03.14 10059
54 xe2 dbexpress 한글 문제 화면캡처 [1] file 오명탁 2012.02.18 10082
53 XE3에서 FPC 와 FM 라이브러리 위치가.. [1] 푸우우 2012.12.03 10106
52 Dll 안에 있는 폼에서 SpeedButton을 누르면 포커스가 사라지는 문제 file Accounting 2013.02.20 10122
51 [질문] XE3 DataSnap 사용시 SQL 문의 [1] cdrd 2012.10.12 10130



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