Q&A

  • 인디 HTTP 파일포스트가 안됩니다.
안녕하세요.
인디로 http post를 하다 막혀 질문을 올립니다.

<FORM METHOD="post" enctype="multipart/form-data" name="test" ACTION="http://hdwiki2.book.kim/uploadpict.php">
<TABLE>
<TR> <TD><INPUT TYPE="text" NAME="FileNumber" id="FileNumber" value="1"></TD></TR>
<TR> <TD><INPUT TYPE="text" NAME="ImagePath" id="ImagePath" value="./upload/"></TD></TR>
<TR><TD><INPUT TYPE="file" NAME="Image0" id="Image0"></TD></TR>
<TR><TD><INPUT TYPE="text" NAME="ImageSize0" id="ImageSize0" value="100_80"></TD></TR>
<TR> <TD><INPUT TYPE="file" NAME="Image1" id="Image1"></TD></TR>
<TR> <TD><INPUT TYPE="text" NAME="ImageSize1" id="ImageSize1" value="0_400"></TD></TR>
<TR> <TD><INPUT TYPE="submit"></TD></TR>
</TABLE>
</FORM>

상기 html폼과 같이 파일포스트를 하려고 했는데 파일이 가질 않습니다.

  fHTTP := TIdHTTP.Create(nil);
  postdata := TIdMultiPartFormDataStream.Create;
  fhttp.Request.ContentType := postdata.RequestContentType;
  with postdata do
begin
    AddFormField('FileNumber', '1');
    AddFormField('ImagePath', './upload/');
    AddFile('Image0', Extractfilepath(paramstr(0)) + '0.jpg', postdata.RequestContentType);
    AddFormField('ImageSize0', '100_80');
    AddFile('Image1',  Extractfilepath(paramstr(0)) + '1.jpg',postdata.RequestContentType);
    AddFormField('ImageSize1' , '600_400');
end;
  postdata.Position := 0;
  recstream := TStringStream.Create('');
  vurl := 'http://hdwiki2.book.kim/uploadpict.php';
  try
    try
      fhttp.Post(vurl, postdata, recstream);
      Result := recstream.DataString;
    except
      MyShowMessage('Connection Fail to ' + vurl);
      Result := '';
    end;
  finally
    recstream.Free;
    postdata.Free;
    fHTTP.Free;
end;

문제는 어제까지는 이코드를 컴파일해보면 제대로 됐는데 오늘 갑자기 포스트가 안되는 실행파일이 생기는겁니다.
인디관련코드는 전혀 수정하지않았는데 말이죠.
이전에 이런 증상이 나타났을때는 델파이를 다시 태우면 없어졌는데 지금은 인디도 버젼업해보고 델파이도 다시 깔아봤지만 전혀 포스트가 않됩니다.
이거 주기적으로 이러니 정말 환장할 지경인데요.
코드가 잘못인지 인디탓인지 선배님들께서 한수 가르쳐주십시오.
감사합니다.

1  COMMENTS
  • Profile
    steps 2008.09.05 23:51
    <!--CodeS-->
    AddFormField(`ImageSize0`, `100_80`);
    AddFormField(`ImageSize1` , `600_400`);
    AddFile(`Image0`, Extractfilepath(paramstr(0)) + `0.jpg`, postdata.RequestContentType);
    AddFile(`Image1`, Extractfilepath(paramstr(0)) + `1.jpg`,postdata.RequestContentType);
    <!--CodeE-->

    코드에서 포스트데터스트림에 파일을 추가하는 순서를 바꾸니 포스트가 제대로 됩니다.
    텍스트필드들을 먼저 추가하고 파일들은 마지막에 몰아서 추가하면 되는군요.
    원인은 해명하지못했지만 저와 같은 경우를 당하시는 분들께 도움이 되기를 바랍니다.
    • 석주현
      2008.09.15 09:45
      http://www.delphi.co.kr/zboard/view.php?id=qanda&no=101769 최용일님의 답변을 참조 하셔서 만드시...
    • 과학상자
      2008.09.15 23:47
      흑..T.T 잘모르겠어요..ㅠㅠ 소나기님.. a.exe -a d:\program1\;d:\program2\ 이렇게 입력하면 그부...
    • 정선봉
      2008.09.13 02:57
      Windows Vista에서 드라이버 설치를 하려고 합니다. Xp에서는 설치가 잘 되었습니다. procedure TForm1...
    • 홍성락
      2008.09.13 01:21
      Image1.Picture := TData_My(vList.Items[0]).Image.Picture; 이렇게 하면 보일겁니다.
    • 이은주
      2008.09.13 08:39
      ㅎㅎ 그렇게 간단한 거군요 감사합니다.
    • 석주현
      2008.09.12 20:34
      1. FileExists(파일이름) 을 하시면 일단 파일이 존재 유무가 나옵니다. 2. 경우는 정해진 포멧이 있...
    • 이혁진
      2008.09.12 20:52
      fileeq := FileExists(ckfa.bin); 이렇게 하면 되는 걸까요? 자꾸 ckfa 가 선언되어 있지 않다고 나와서...
    • 석주현
      2008.09.12 20:54
      아래와 같은 식으로 읽어서 처리하시면 됩니다. <!--CodeS--> procedure TfrmMain.btn2Click(S...
    • 석주현
      2008.09.12 20:55
      파일이름을 집어 넣으시려면 문자열이니 fileeq := FileExists('ckfa.bin'); 이렇게 해주셔야 합...
    • 이혁진
      2008.09.12 21:00
      FileEQ := FileExists('ckfa.bin'); 이렇게 해야 하는군요. 죄송합니다. ^^ + 앗 벌써 댓글이 정말 감사...
    • steps
      2008.09.12 04:40
      <!--CodeS--> AssignFile(FH, 'C:\test.txt'); Append(FH); While 검색시작일 <= 검색...
    • 홍성락
      2008.09.12 04:54
      화면이 잠긴다면 Application.ProcessMessages;와 Refresh를 적절히 사용하되 너무 자주도는 루틴에서는...
    • 이정욱
      2008.09.12 10:21
      프로그램 OnCreate 시 Assign및 Append 하고, 종료시 CloseFile을 해보세요. 아마 계속 호출 되다 보니,...
    • 허접플그래머
      2008.09.12 18:28
      답변 정말정말 감사드립니다. 다시 해보겠습니다. 명절 잘 보내세요 화이링^^
    • 이의성
    • 2008.09.11 22:59
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      2008.09.12 11:26
      네... 그곳에 포함되어있지 않다면.. 없는 것 입니다..
    • 석주현
      2008.09.12 16:11
      KeyPress 이벤트에서 아래와 같이 입력을 숫자만 받는 방법이 있습니다. begin If Not (Key In ...
    • 이의성
      2008.09.12 19:29
      답변 감사합니다 ^^ 즐거운 명절 되세요~~
    • 소울해커
      2008.09.12 21:05
      XPMenu 라는 컴포넌트가 있습니다. 폼에다 던져 놓기만하면 말그대로 기본 컴포넌트들의 모습을 XP ...
    • 플루토
    • 2008.09.11 20:41
    • 2 COMMENTS
    • /
    • 0 LIKES
    • steps
      2008.09.11 21:01
      이미지파일의 확장자와 실제포맷이 일치하는가를 알자면 각 포맷의 헤더에서 식별자를 읽어내면 됩니다. ...
    • 플루토
      2008.09.12 01:04
      네, 감사합니다..^ ^
    • 석주현
      2008.09.10 21:12
      type SDLL_GetStatus = function(PSTATUS : Byte):boolean;stdcall; 저 같은 경우엔 이 Calling co...
    • 홍성락
      2008.09.10 21:29
      원형함수가 SDLL_API BOOL GetStatus(DT_STATUS *pStatus);이면 파라메다는 포인터형인거 같은데요. ....
    • 석주현
      2008.09.10 21:50
      전 저것도 못보고 Calling convention 부분만 생각하고 있었는데 진짜 그게 문제네요.. ^^ 아 창피해라.....
    • 신철우
      2008.09.10 22:03
      SDLL_GetStatus = function(PSTATUS : PSTATUS):boolean;stdcall; 에서 뭐가 잘못된건지? GetStatus(p...
    • 홍성락
      2008.09.10 22:36
      앗 실수...변수명과 형명이 같았네요.... ... type DT_STATUS = packed record bD...
    • 석주현
      2008.09.10 14:30
      TQuery 를 이용하여 SQL 쿼리 결과를 만들어서 DataSet 프로퍼티에 연결 하여 사용하면 됩니다.
    • 천천히
      2008.09.10 18:05
      소나기님..답변 감사드립니다... 그런데 데이터 행이 조회해서 여러개가 나왔는데 그걸 모두 qreport에...
    • 석주현
      2008.09.10 21:02
      제 설명보다 델파이 디렉토리에 Demos에 보면 Quick Report에 관한 예제가 있습니다. 확인해 보세요. ...
    • 박동호
    • 2008.09.10 01:19
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2008.09.10 02:20
      소스내에서나 사용한 DLL등의 소스에서 SendMessage로 검색하세요. 아니면 띄어쓰기를 바꿔가며 WM_USER...
    • 석주현
      2008.09.10 05:55
      SendMessage 가 없다면 PostMessage 도 한번 찾아 보세요. 보통은 WM_USER + 10 이걸 그냥 안쓰고 다...
    • 신재민
    • 2008.09.09 13:51
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 강중규
    • 2008.09.07 04:56
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 석주현
      2008.09.08 16:21
      인스톨 실드 버젼이 틀린거 같아 정확히 말씀드리기 힘든데요. Application 의 dat 디렉토리를 그냥 ...
    • 정경철
    • 2008.09.06 06:22
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 이창엽
    • 2008.09.05 23:54
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김동원
      2008.09.09 17:08
      MFC71.dll은 Microsoft VisualStudio 2003.Net 버전의 RTL 입니다. Microsoft VisualStudio 6.0이 설치...
    • 이창엽
      2008.09.11 01:38
      답변 감사합니다.. 패치문제 였네요...ㅠㅠ 한글 최신버전으로 패치하니깐 문제가 해결
    • 이의성
    • 2008.09.05 20:15
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 소울해커
      2008.09.05 22:05
      Win32 탭에 XPManifest 라는게 있는데 폼에 그냥 던져놓고 실행하면 비슷하게 나올겁니다. 개별적으로 ...
    • 이의성
      2008.09.05 22:18
      답변감사합니다~~ 그런데, Win32 탭에 XPManifest 라는게 없네요;; (Delphi6 입니다) ( 위쪽 모양이 깔...
    • 임형호
      2008.09.06 02:23
      위에껀 flatstyle 컴포넌트 같은데요. 기본컴포넌트를 저렇게 만드시는것보다는... 저런형태의 무료컴포...
    • 이의성
      2008.09.10 03:04
      감사합니다~~ 역시 요런 컴포넌트 있을거 같았는데 ^^;; 덕분에 정신건강에 많은 도움이 될 듯 싶습니...
    • 신철우
    • 2008.09.05 20:05
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 석주현
      2008.09.09 01:40
      잘되는데요. 아무래도 다른 문제 같습니다. 웹 브라우져에서 잘 열린다면 똑 같이 잘 열리는게 정상입니...
    • 소울해커
      2008.09.05 19:27
      Memo.Lines.SaveToFile('c:\rx.txt');
    • 김경석
      2008.09.06 16:11
      감사합니다.
    • steps
    • 2008.09.05 07:01
    • 1 COMMENTS
    • /
    • 0 LIKES
    • steps
      2008.09.05 23:51
      <!--CodeS--> AddFormField(`ImageSize0`, `100_80`); AddFormField(`ImageSize1` , `600_400`);...
    • steps
    • 2008.09.05 00:54
    • 6 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2008.09.05 01:29
      KeyPreview속성을 True로 설정하세요. 그럼 폼이 먼저 메세지를 받습니다. 윈도우 메세지로 처리하는것...
    • steps
      2008.09.05 04:20
      최용일님 감사합니다. 그런데 폼에서도 마우스클릭시에 keyup 이벤트가 발생합니다. 제가 shift + clic...
    • 소울해커
      2008.09.05 05:06
      옛날에 좀 고민을 해봤었고 질문도 올려봤었는데 별다른 답변을 못들었던 부분입니다. 마우스를 눌렀는...
    • steps
      2008.09.05 06:35
      소울해커님 좋은 경험 잘 배웠습니다. 델파이건상수에 VK_LBUTTON, VK_RBUTTON, VK_MBUTTON 이 1, 2, 4 ...
    • 석주현
      2008.09.05 07:39
      TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble); 쉬프트 스...
    • 석주현
      2008.09.05 07:44
      어 해보니 진짜 Keyup에서만 이벤트가 발생하네요. 거참 하여간 해봐야 뭘 알겠으니 ㅠ_ㅠ
    • 이정욱
      2008.09.04 21:31
      TBitmap 의 Canvas 핸들로 엮어주시면 될거 같습니다. ^^