자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다. 
  • 제품설치/등록 오류 문의: 설치/등록 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 15638
공지 유용한 관련 사이트 관리자2 2014.03.20 54468
공지 본 게시판은 개발자 여러분들의 질문과 답변을 공유하는 공간입니다. 관리자 2012.01.10 97837
1099 비콘신호 수신간격 조정을 어디서 해야하나요? [2] secret kim 2015.12.04 2
1098 seatle에서 android ini 파일 생성? [5] 열심히*^^* 2015.12.04 640
1097 비콘 안드로이스 샘플소스로 실행했는데 안됩니다. [2] secret kim 2015.12.04 2
1096 위험감지앱이 감지를 했을때만 화면표시를 할 수 있나요? [2] secret kim 2015.12.02 3
1095 라이센스 확인 부탁드립니다. [1] secret 우정 2015.12.02 4
1094 [DCC Error] hDataUtil.pas(756): E2581 Backend error: Stored value type does not match pointer operand type! [1] 황규섭 2015.12.01 538
1093 비콘 관련 문의드려요 ^^;;; [4] 쭈녕 2015.11.29 1015
1092 한글 장평 늘어나는 것 수정방법? [2] datare 2015.11.30 1501
1091 [마이그레이션 세미나] BPL을 이용한 개발 방법을 알고 싶습니다. 험프리 2015.11.24 152
1090 DataSnap에서 ArrayDML 이 이용이 가능 한지 알고 싶습니다. [5] secret 가나당 2015.11.25 9
1089 apk 파일 생성 문의. [1] 회원 2015.11.26 485
1088 Rave Reports Component는 별도로 구매해야 하나요? [2] 바람돌이 2015.11.13 332
1087 [마이그레이션 세미나] AWS의 데이터베이스(RDS)에 연결하는 방법 중에서 웹서비스를 이용하는 방법에 대하여 알고 싶습니다. 험프리 2015.11.24 360
1086 [마이그레이션 세미나] 보안모듈로 암호화 하는 내용이 궁금합니다. 험프리 2015.11.24 568
1085 [마이그레이션 세미나] C++ 빌더 기초 과정을 요청합니다. 험프리 2015.11.24 57
1084 [마이그레이션 세미나] reFind.exe는 델파이 몇버전 부터 지원하나요? 험프리 2015.11.24 221
1083 [마이그레이션 세미나] 데이터스냅에 대한 팁 또는 샘플자료 부탁합니다. 험프리 2015.11.24 98
1082 [마이그레이션 세미나] 소스파일은 없고, 실행파일만 있을 때 실행파일 만으로 소스코드를 불러올 수 있는 프로그램이 있을까요? 험프리 2015.11.24 283
1081 [마이그레이션 세미나] 델파이 10 시애틀에 특화된 기능에 대한 설명이 부족해 아쉬웠습니다. 험프리 2015.11.24 112
1080 DBExpress 연동 관련 질의 [2] file 백거 2015.11.23 167