• <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 浪跡天涯 閱讀(15617) 評論(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年1月>
            303112345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            導航

            統計

            常用鏈接

            留言簿(22)

            隨筆分類(30)

            隨筆檔案(29)

            文章分類

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            評論排行榜

            亚洲国产成人精品女人久久久 | 国产色综合久久无码有码| 精品久久久一二三区| 午夜欧美精品久久久久久久 | 国内精品欧美久久精品| 一级女性全黄久久生活片免费 | 99久久精品这里只有精品| 久久久久久国产精品免费免费| 亚洲精品高清一二区久久| 人妻无码久久一区二区三区免费 | 88久久精品无码一区二区毛片| 亚洲国产婷婷香蕉久久久久久| 亚洲AV日韩精品久久久久久久| 国产农村妇女毛片精品久久 | 久久艹国产| 99久久超碰中文字幕伊人| 无码人妻久久一区二区三区蜜桃| 粉嫩小泬无遮挡久久久久久| 好属妞这里只有精品久久| 久久亚洲中文字幕精品一区四| 久久精品麻豆日日躁夜夜躁| 2021国内精品久久久久久影院| 狠狠干狠狠久久| 亚洲精品乱码久久久久久按摩 | 久久精品国产亚洲综合色| 无码八A片人妻少妇久久| 久久97久久97精品免视看| 成人久久精品一区二区三区| 中文字幕亚洲综合久久菠萝蜜| 久久99免费视频| 久久精品九九亚洲精品天堂| 午夜精品久久久久久久| 亚洲色欲久久久综合网东京热| 一本久久a久久精品综合香蕉| 久久国产精品国语对白| 久久精品这里只有精99品| a级毛片无码兔费真人久久| 久久久精品午夜免费不卡| 久久精品国产只有精品2020| 国产91久久精品一区二区| 久久无码av三级|