자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다. 
  • 제품설치/등록 오류 문의: 설치/등록 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 15762
공지 유용한 관련 사이트 관리자2 2014.03.20 54577
공지 본 게시판은 개발자 여러분들의 질문과 답변을 공유하는 공간입니다. 관리자 2012.01.10 97974
979 [무료 온라인 세미나] 새로운 RAD Studio 10 시애틀: 윈도우 10 혜택을 누리세요! 관리자 2015.09.11 165
978 XE6 다국어 관련 에러때문에 문의 드립니다.. file spirng 2015.09.23 112
977 [공유] 멀티-디바이스 디자이너에서 마스터뷰를 상속한 개별뷰에서 수정한 내용을 원복할 수 있나요? Humphery 2015.09.24 326
976 [무료 온라인 세미나] 사물인터넷 실제 구현하기 DeepDive! 관리자 2015.09.15 97
975 모바일 기기 슬라이드 메뉴에 알람표시하기 [2] file 라드 2015.09.22 249
974 NetChek.dll이(가) 프로그램을 시작할수 없습니다. [1] file 토토로 2015.09.21 439
973 [IoT 세미나] 타이젠 기기 어플도 개발 가능한가요? Humphery 2015.09.24 312
972 XE8 작업진행중 프로그래스 표시 [1] 가을이다 2015.09.22 594
971 일정시간 경과후 소켓에러 발생 [3] file 사랑남 2015.09.18 365
970 [마이그레이션] 프로젝트 실행시 에러메시지입니다. [1] secret 박성민 2015.09.18 10
969 PUSH 알림 이벤트 오류 문의 [4] file 사랑남 2015.09.15 500
968 안드로이드 프로그램 File Dialog 구현 [4] 상용 2015.09.16 474
967 TFMTBCDField 필드 type 사용방법에 대해 문의드립니다 [1] delphi 2015.09.17 97
966 서브폼 Close시 메인폼 활성화문제 라운지 2015.09.16 341
965 프로젝트그룹(ProjectGroup)의 여러 프로젝트가 한꺼번에 빌드 됨 [2] file 미스터몽키 2015.09.15 281
964 볼랜드포럼에서 논의가 되고 있는 C++11 32비트의 Exception코드 문제 [1] 더스틴 2015.09.16 587
963 [XE8] IDE 에디터 사용법 문의 [4] 가을이다 2015.09.14 164
962 시애틀 IDE 멀티라인 주석처리 문의 [1] 회원 2015.09.16 415
961 Delphi 10의 새로운 기능 문의드립니다. [2] 라운지 2015.09.16 144
960 본인 인증 문의 [1] 사랑남 2015.09.15 291