作者 主題: CGI- 上傳圖檔?  (閱讀 3792 次)

0 會員 與 1 訪客 正在閱讀本文。

everydate

  • 可愛的小學生
  • *
  • 文章數: 16
    • 檢視個人資料
CGI- 上傳圖檔?
« 於: 2008-04-28 16:14 »
請問上傳檔案時,如是是圖檔的話,是不是要有什麼特別要注意的地方?
下面這段 code ,上傳一般的文字檔是可以的 
可是如果上傳圖檔就會打不開檔案,而且檔案大小也不正確....@@

#define IMG_FILE /mydir/img.gif
   
main()
{
    char    szReadBuf[ReadBufSize];
    char    szBoundryBuf[30] = "----------------------------";
    char    szTmpFileName[128];
   char    *contentLength;
   int     iContentLength;
   int     iRemainLength;
    FILE    *pUploadDrvFile;
    FILE    *pTmpFile;

    printf("Content-type: text/html\r\n\r\n");

    if (strcmp( (char*)getenv("REQUEST_METHOD"), "POST" ) == 0)
    {
        // Unlink old file
        if (access(IMG_FILE , F_OK) == 0)
        {
               unlink(IMG_FILE );
        }

   // POST
   contentLength = (char*)getenv("CONTENT_LENGTH");
   if (contentLength)
   {

            // Create temporarily file
            tmpnam(szTmpFileName);
            pTmpFile = fopen(szTmpFileName, "w");
           
   iContentLength = iRemainLength = atoi(contentLength);
            while( iRemainLength )
            {
                memset(szReadBuf, 0, sizeof(szReadBuf));
                fread(szReadBuf,3,iRemainLength,stdin);
                fwrite(szReadBuf, 3, iRemainLength, pTmpFile);
                iRemainLength -= iRemainLength;
            }
            fclose(pTmpFile);
            pTmpFile = fopen(szTmpFileName, "r");
            pUploadDrvFile = fopen(IMG_FILE, "w");
                       
            while(fgets(szReadBuf, ReadBufSize, pTmpFile) != NULL)
            {
             if ((strncmp(szReadBuf, "Content-", strlen("Content-")) != 0)
                        && (strncmp(szReadBuf, szBoundryBuf, strlen(szBoundryBuf)) != 0) )

                     {
                     fputs(szReadBuf, pUploadDrvFile);
                     }
            }
                     
            fflush(stdout);
           
            fclose(pUploadDrvFile);
            fclose(pTmpFile);
}

elleryq

  • 區域板主
  • 鑽研的研究生
  • *****
  • 文章數: 908
  • 性別: 男
    • 檢視個人資料
    • Thinking more...
回覆: CGI- 上傳圖檔?
« 回覆 #1 於: 2008-04-28 16:42 »
簡單的說,要處理圖檔沒這麼簡單.

1. client 端的 html 的 form 要加上 enctype="multipart/form-data"
2. server 端 cgi 需要作特別的處理.

建議找別人寫好的 library 會比較快些.
Plan your work, then work your plan.
我的首頁:http://blog.elleryq.idv.tw
351899by http://counter.li.org

abelyang

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 1097
    • 檢視個人資料
回覆: CGI- 上傳圖檔?
« 回覆 #2 於: 2008-04-28 17:15 »
bin mode ?

everydate

  • 可愛的小學生
  • *
  • 文章數: 16
    • 檢視個人資料
回覆: CGI- 上傳圖檔?
« 回覆 #3 於: 2008-04-29 16:08 »
試了好久還是不行 ...我敗了 Orz

請問有人有上傳圖檔的 source code 嗎?@@