• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            浪跡天涯

            唯有努力...
            努力....再努力...

            libcurl上傳文件實例

            .

            Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header. You can disable this header with CURLOPT_HTTPHEADER as usual.

            When setting CURLOPT_HTTPPOST, it will automatically set CURLOPT_NOBODY to 0 (since 7.14.1).


            CURLOPT_POST   --application/x-www-form-urlencoded形式

            A non-zero parameter tells the library to do a regular HTTP post. This will also make the library use the a "Content-Type: application/x-www-form-urlencoded" header. (This is by far the most commonly used POST method).

            Use one of CURLOPT_POSTFIELDS or CURLOPT_COPYPOSTFIELDS options to specify what data to post and CURLOPT_POSTFIELDSIZE or CURLOPT_POSTFIELDSIZE_LARGE to set the data size.

            Optionally, you can provide data to POST using the CURLOPT_READFUNCTION and CURLOPT_READDATA options but then you must make sure to not set CURLOPT_POSTFIELDS to anything but NULL. When providing data with a callback, you must transmit it using chunked transfer-encoding or you must set the size of the data with the CURLOPT_POSTFIELDSIZE or CURLOPT_POSTFIELDSIZE_LARGE option. To enable chunked encoding, you simply pass in the appropriate Transfer-Encoding header, see the post-callback.c example.

            You can override the default POST Content-Type: header by setting your own with CURLOPT_HTTPHEADER.

            Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header. You can disable this header with CURLOPT_HTTPHEADER as usual.

            If you use POST to a HTTP 1.1 server, you can send data without knowing the size before starting the POST if you use chunked encoding. You enable this by adding a header like "Transfer-Encoding: chunked" with CURLOPT_HTTPHEADER. With HTTP 1.0 or without chunked transfer, you must specify the size in the request.

            When setting CURLOPT_POST to a non-zero value, it will automatically set CURLOPT_NOBODY to 0 (since 7.14.1).

            If you issue a POST request and then want to make a HEAD or GET using the same re-used handle, you must explicitly set the new request type using CURLOPT_NOBODY or CURLOPT_HTTPGET or similar.


            以上是兩種POST方式,具體代碼如下:
                ALLUPLOADFILES::iterator iter = allFiles.begin();
                
            //如果含有文件 //name="files"; filename="file1.txt"    
                if( bFileFlag ) //以form-dataf方式post
                {
                    
            for (;iter != allFiles.end();iter++)
                    
            {
                        
            if ( iter->isFile )
                        
            {
                            my_bytestr_url_encode(iter
            ->fileName);
                            curl_formadd(
            &post, &last, CURLFORM_COPYNAME , iter->contrlID.c_str(),
                                CURLFORM_BUFFER, iter
            ->fileName.c_str(),
                                CURLFORM_BUFFERPTR,iter
            ->data.c_str(),
                                CURLFORM_END);    
                        }

                        
            else
                        
            {
                            curl_formadd(
            &post, &last, CURLFORM_COPYNAME , iter->contrlID.c_str(),
                                CURLFORM_COPYCONTENTS,iter
            ->data.c_str(),
                                CURLFORM_END);    
                        }

                    }

                }

                
            else //以application/x-www-form-urlencoded方式post
                {
                    
            for (;iter != allFiles.end();iter++)
                    
            {
                        my_bytestr_url_encode(iter
            ->contrlID);
                        my_bytestr_url_encode(iter
            ->data);
                        postbuffer 
            += iter->contrlID;
                        postbuffer 
            += "=";
                        postbuffer 
            += iter->data;
                        postbuffer 
            += "&";
                    }

                }



                
            if (bFileFlag) 
                    curl_easy_setopt(curl, CURLOPT_HTTPPOST,post);
                
            else 
                
            {
                    curl_easy_setopt(curl, CURLOPT_POST,
            1);
                    curl_easy_setopt(curl, CURLOPT_COPYPOSTFIELDS  , postbuffer.c_str());
                }


                code 
            = curl_easy_perform(curl);


            對于返回頁面,我們可以和上一篇文章所說那樣,設置write的回調函數,寫入文件即可:
                curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 
            1);
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);

            long writer(void
            *data, int size, int nmemb, string &content)
            {
                long sizes 
            = size * nmemb;
                string temp(data,sizes);
                printf(
            "receive data(%d bytes):\r\n%s",  sizes, (char*)data );
                content 
            += temp; 
                
            return sizes;
            }

            測試:
            我們可以用tomcat寫一個jsp上傳代碼測試一下,其中使用到了smartUpload組件,代碼如下:upload.html
            <form action="upload.jsp" method="post" ENCTYPE="multipart/form-data">

            輸入名稱:
            <input type="type" name="name"><br>

            選擇要上傳的圖片:

            <input type="file" name="pic">

            <input type="submit" value="上傳">

            </form>
            upload.jsp如下:
            <jsp:useBean id="smart" scope="page" class="org.lxh.smart.SmartUpload"/>

            <%
                   
            //上傳初始化
                   smart.initialize(pageContext);
                   
            //準備上傳
                   smart.upload();     
                   
            //保存上傳的文件
                   
            //smart.save("/upload");
                   
            //取得文件的擴展名稱
                   String ext = smart.getFiles().getFile(0).getFileExt();
            %>
            <%
                   
            //String name=request.getParameter("name"); 表單被封裝了,不能用這種方法取值.
                   String name=smart.getRequest().getParameter("name");
            %> 

                   
            //<%=name+"."+ext%>
            <%       //保存文件,包括改名.
                   smart.getFiles().getFile(0).saveAs("/upload/"+name+"."+ext);
            %>

            經測試用libcurl POST文件成功。以上是簡單的測試,比較深入的問題還有待進一步研究。
            由于我對HTTP協議,WEB這塊不是太熟,如果有錯誤理解不當的地方,還請指正,歡迎大家和我探討,謝謝!

            posted on 2008-07-03 16:49 浪跡天涯 閱讀(15625) 評論(3)  編輯 收藏 引用 所屬分類: Lib

            評論

            # re: libcurl上傳文件實例 2008-07-03 21:15 企業即時通訊

            容(提交失敗后,可以通過“恢復上次提交”恢復剛剛提交的內容)   回復  更多評論   

            # re: libcurl上傳文件實例 2008-09-11 13:40 浪跡天涯

            你說的是斷點續傳的問題,目前libcurl好像并不支持!  回復  更多評論   

            # re: libcurl上傳文件實例 2014-01-08 21:08 ]]]]

            ''''  回復  更多評論   

            <2008年9月>
            31123456
            78910111213
            14151617181920
            21222324252627
            2829301234
            567891011

            導航

            統計

            常用鏈接

            留言簿(22)

            隨筆分類(30)

            隨筆檔案(29)

            文章分類

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            評論排行榜

            久久综合久久久| 人妻无码久久一区二区三区免费| 中文字幕人妻色偷偷久久| 亚洲午夜久久久久久久久久| 精品无码久久久久国产动漫3d| 亚洲精品乱码久久久久久蜜桃图片| 久久亚洲精品成人av无码网站| 欧美一区二区精品久久| 亚洲第一永久AV网站久久精品男人的天堂AV| 久久99精品免费一区二区| 久久人妻无码中文字幕| 香蕉久久一区二区不卡无毒影院| 久久精品国产99久久丝袜| 久久精品毛片免费观看| 欧美亚洲另类久久综合婷婷| 久久99精品久久久久久hb无码| 亚洲国产成人久久综合碰碰动漫3d | 久久久久久国产精品无码超碰| 亚洲一本综合久久| 少妇内射兰兰久久| 久久中文精品无码中文字幕| 国内精品伊人久久久久av一坑 | 97久久超碰国产精品2021| 国产一区二区精品久久凹凸| 午夜天堂av天堂久久久| 亚洲午夜福利精品久久| 区久久AAA片69亚洲| 久久精品国产只有精品2020| AV色综合久久天堂AV色综合在| 成人妇女免费播放久久久| 久久99中文字幕久久| 久久精品国产亚洲AV不卡| 99久久无色码中文字幕人妻| 久久综合狠狠综合久久| 久久久久国产精品麻豆AR影院 | 精品午夜久久福利大片| 色欲综合久久躁天天躁蜜桃 | 久久久久亚洲av无码专区喷水 | 狠狠色综合久久久久尤物 | 免费国产99久久久香蕉| 亚洲精品无码久久久久久|