자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다. 
  • 제품설치/등록 오류 문의: 설치/등록 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 15777
공지 유용한 관련 사이트 관리자2 2014.03.20 54595
공지 본 게시판은 개발자 여러분들의 질문과 답변을 공유하는 공간입니다. 관리자 2012.01.10 98015
33 데이터베이스 엔진 에러 [1] 초딩개발자 2012.05.01 11116
32 델파이 7 사용자입니다. 델파이 XE2에서 더 좋아진 점이 무엇이고, 업그레이드가 꼭 필요한지 알고 싶습니다. [2] file 관리자 2012.07.12 11510
31 TStyleManager 관련 질문 [4] 구군v 2012.04.05 11558
30 델파이7과 델파이XE에서의 동일 함수의 리턴값이 서로 다릅니다. [2] 희망봉 2012.05.03 11574
» XE3에서 INDY를 이용한 http 파일 전송 오류 [2] onehana 2012.10.12 11944
28 다른 프로그램과 연동 방법 문의 합니다. [1] memc 2012.06.14 12186
27 안드로이드에서 Datasnap 서버를 이용하여 Oracle DB에 이미지 저장 [2] keke22 2012.04.17 12196
26 Delphi 6.0 및 TLabel 관련문의 [1] Fury 2012.03.08 12215
25 아이폰 백그라운드에서 계속 실행 하는 방법 알고 싶네요.. [2] 소간지 2013.07.11 12680
24 Delphi 10.3 rio 에서 10.2에서 잘되었던 내 전화번호 가져오기가 안됩니다. [2] 델파이_사랑 2019.09.05 12960
23 Indy9 -> Indy10으로 변환중 오류 발생 [1] 희망봉 2012.05.04 13358
22 RAD Studio (델파이, C++빌더) 에서 원격 디버깅 (Remote debugging) 이 안되나요? 관리자 2012.03.07 13448
21 안녕하세요. 아름넷닷컴 김광수 입니다. VB로 만들어진 OCX인데 델파이 2007에 사용할수가 없어서 문의 드립니다. [7] file 김광수 2012.04.19 13503
20 프로젝트옵션의 어플리케이션 아이콘 변경 방법 ? [2] file 준이킴 2012.03.29 13847
19 StringGrid에 출력되는 Data(제목등)이 이중(잔상?)으로 나오는데 해결책을 구합니다. [4] file AllwaysHappy 2017.11.01 13860
18 DataSnap Server 사용시 msvcr80.dll 오류 [2] file 이치고 2012.03.31 13906
17 델파이 XE2에서 MS-SQL에 연결이 안되요 관리자 2012.04.05 14213
16 TChart 그래프 -> QRChart [4] 양현숙 2012.05.10 14535
15 델파이 컨트롤(edit, memo)에서 한영전환 [4] superman 2012.05.30 15248
14 MIDAS.DLL [1] 쥐랑고양이 2012.05.03 15410