青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

浪跡天涯

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

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 浪跡天涯 閱讀(15689) 評論(3)  編輯 收藏 引用 所屬分類: Lib

評論

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

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

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

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

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

''''  回復  更多評論   


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


<2008年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

導航

統計

常用鏈接

留言簿(22)

隨筆分類(30)

隨筆檔案(29)

文章分類

搜索

積分與排名

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久一日本道色综合久久| 午夜精品久久久久久久99黑人| 欧美成人一区在线| 免费亚洲网站| 欧美精品一区二区精品网 | 欧美成人精品在线视频| 免费在线日韩av| 亚洲国产裸拍裸体视频在线观看乱了 | 国产精品区免费视频| 国产精品区二区三区日本 | 午夜视频久久久久久| 久久精品国产亚洲a| 欧美成人一品| 宅男66日本亚洲欧美视频| 香蕉国产精品偷在线观看不卡| 久久九九免费| 欧美日韩亚洲综合在线| 国产亚洲视频在线观看| 亚洲精品国产精品国自产观看| 亚洲一区国产一区| 久久婷婷国产麻豆91天堂| 亚洲精品看片| 久久精品av麻豆的观看方式| 欧美日本在线播放| 黄色欧美成人| 午夜精品视频在线观看一区二区| 欧美激情精品久久久久久免费印度| 99re成人精品视频| 久色成人在线| 国产婷婷成人久久av免费高清| 日韩视频免费在线| 狼狼综合久久久久综合网 | 先锋影音国产一区| 欧美成人69| 欧美一区二区三区四区夜夜大片 | 亚洲国产精品嫩草影院| 欧美一区二区在线看| 亚洲欧洲日韩在线| 欧美亚洲色图校园春色| 欧美精品一区三区| 91久久精品一区| 国产精品每日更新| 久久国产欧美日韩精品| 欧美视频一二三区| 亚洲日本无吗高清不卡| 久久亚洲视频| 欧美亚洲一区二区在线| 国产精品日韩欧美综合 | 蜜桃av一区二区| 亚洲欧美日韩精品久久久久| 欧美日韩亚洲系列| 99re热精品| 91久久国产综合久久91精品网站| 久久一区二区三区四区| 好吊成人免视频| 久久人人九九| 久久狠狠亚洲综合| 韩国欧美一区| 嫩草伊人久久精品少妇av杨幂| 久久精品欧洲| 亚洲电影天堂av| 欧美大片免费观看| 欧美电影资源| 99成人精品| 99国产精品视频免费观看| 欧美日韩中文字幕在线| 亚洲欧美电影院| 亚欧成人在线| 1769国产精品| 亚洲精品国精品久久99热| 欧美日韩在线播放三区| 欧美一级二级三级蜜桃| 久久久国产精彩视频美女艺术照福利| 黄色成人在线网址| 亚洲国产高清在线观看视频| 欧美另类一区| 欧美亚洲网站| 久久中文字幕一区| 亚洲素人在线| 欧美一区二区三区在线播放| 亚洲国产一区二区视频| 日韩视频不卡中文| 国产色产综合色产在线视频| 欧美大成色www永久网站婷| 欧美日本三级| 久久男人av资源网站| 欧美激情精品久久久久久蜜臀| 亚洲一级黄色| 久久久久久夜精品精品免费| 99精品热6080yy久久| 亚洲欧美怡红院| 亚洲精品欧美日韩| 性久久久久久久久| 99精品视频免费| 欧美中文在线免费| 亚洲无线视频| 麻豆精品网站| 欧美在线短视频| 欧美久久影院| 久久夜色精品国产| 国产精品成人播放| 亚洲黄色性网站| 狠狠久久亚洲欧美| 狠色狠色综合久久| 香蕉av777xxx色综合一区| 久久亚裔精品欧美| 亚洲女性喷水在线观看一区| 久久亚洲国产精品日日av夜夜| 亚洲影视在线播放| 欧美国产激情| 欧美成人第一页| 国产午夜精品久久久久久久| 亚洲剧情一区二区| 亚洲黄色高清| 久久久夜精品| 久久久.com| 国产欧美精品va在线观看| 日韩一二三区视频| 亚洲欧洲日本国产| 久久久人成影片一区二区三区| 欧美一区在线直播| 国产精品免费看| 在线视频日韩| 亚洲天堂激情| 欧美色一级片| 99精品视频网| 一区二区三区|亚洲午夜| 欧美高清在线一区| 欧美激情偷拍| 亚洲精品免费一区二区三区| 欧美14一18处毛片| 亚洲黄色成人网| 亚洲美女毛片| 欧美日韩激情小视频| 日韩午夜免费| 亚洲欧美日本在线| 国产精品私拍pans大尺度在线 | 久久激五月天综合精品| 久久国产精品久久w女人spa| 国产精品视频第一区| 亚洲影院在线| 久久国产66| 极品av少妇一区二区| 久久久女女女女999久久| 欧美成人精品在线播放| 亚洲精品美女久久7777777| 欧美精品乱人伦久久久久久 | 欧美大片国产精品| 亚洲精品视频一区| 欧美日韩高清免费| 亚洲天堂视频在线观看| 久久国产加勒比精品无码| 永久域名在线精品| 欧美国产日韩二区| 一区二区电影免费观看| 久久精品人人做人人爽| 亚洲国产天堂久久国产91| 欧美国产日韩精品免费观看| av不卡在线看| 久久久久久久尹人综合网亚洲| 在线 亚洲欧美在线综合一区| 欧美搞黄网站| 亚洲欧美日韩精品在线| 欧美成人午夜免费视在线看片 | 欧美日韩亚洲高清| 欧美一区二区播放| 亚洲欧美国产精品桃花| 亚洲一区视频| 国产精品视频大全| 麻豆国产va免费精品高清在线| 亚洲精品影视| 欧美在线啊v| 日韩午夜剧场| 国产一区二区中文字幕免费看| 蜜桃视频一区| 亚洲一区在线免费| 欧美成人在线免费视频| 性欧美超级视频| 亚洲激情社区| 国产手机视频精品| 欧美日韩在线播放| 葵司免费一区二区三区四区五区| 一区二区三区四区国产精品| 欧美大色视频| 久久久亚洲精品一区二区三区| 99精品视频免费全部在线| 狠狠色狠狠色综合日日tαg| 欧美少妇一区二区| 美女亚洲精品| 久久激情婷婷| 性欧美video另类hd性玩具| 99热这里只有精品8| 欧美激情欧美激情在线五月| 久久久99国产精品免费| 欧美亚洲综合久久| 亚洲免费人成在线视频观看| 9久草视频在线视频精品| 亚洲福利视频二区| 亚洲国产福利在线| 精品av久久707|