1. 程式人生 > >通過curl下載檔案

通過curl下載檔案

1. 適用範圍
      本文件介紹SylixOS下通過curl中介軟體下載檔案的流程,使用者應熟悉SylixOS以及curl中介軟體。2. 下載流程
2.1 資源準備
    檔案下載依賴curl中介軟體,故下載前需基於SylixOS進行curl中介軟體移植,移植過程本文件不做詳細介紹,請參照《SylixOS下中介軟體移植手冊》。2.2 下載流程
      檔案下載前需獲取可用的下載url,使用curl中介軟體提供的介面進行檔案下載。下載流程如程式清單 2.1所示。程式清單 2.1  檔案下載流程
#include <stdio.h>
#include <string.h>
#include "curl/curl.h"
/***************************************************************************
** 函式名稱: write_data
** 功能描述: 回撥函式
** 輸  入  : ptr		寫資料指標
**           size	寫入塊位元組數
**           nmemb  	寫資料塊數
**           stream 	目標檔案指標
** 輸  出  : 寫入塊數
** 返  回  : written
***************************************************************************/
size_t  write_data (void  *ptr, size_t  size, size_t  nmemb, FILE  *stream)
{
    size_t written = fwrite(ptr, size, nmemb, stream);
    return written;
}
/***************************************************************************
** 函式名稱: fileDownload
** 功能描述: 下載函式
** 輸  入  : pcAddressUrl	下載地址
**           pcFileName  	下載檔名
** 輸  出  : NONE
** 返  回  : ERROR_NONE
***************************************************************************/
int fileDownload (char  *pcAddressUrl, char  *pcFileName)
{
    CURLcode    curlRet;

    CURL        *curl 	= LW_NULL;
    FILE        *fp      	= LW_NULL;

    char        *url     	= pcAddressUrl;                    /*  下載網址                    */
    char        *filename	= pcFileName;                      /*  下載檔名字                */

    curl = curl_easy_init();                                       /*  初始化 curl 會話            */
    if (!curl) {
        printf("curl_easy_init failed\n");
        return  (PX_ERROR);
    }

    fp = fopen(filename, "w+");                                    /*  開啟檔案                    */
    if (!fp) {
        printf("fopen failed\n");
        return  (PX_ERROR);
    }

    curlRet = curl_easy_setopt(curl, CURLOPT_URL, url);            /*  設定 url                    */
    if (curlRet != CURLE_OK) {
        fclose(fp);
        curl_easy_cleanup(curl);
        return  (PX_ERROR);
    }

    curlRet = curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);/*  設定回撥函式                */
    if (curlRet != CURLE_OK) {
        fclose(fp);
        curl_easy_cleanup(curl);
        return  (PX_ERROR);
    }

    curlRet = curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);      /*  設定寫入檔案控制代碼             */
    if (curlRet != CURLE_OK) {
        fclose(fp);
        curl_easy_cleanup(curl);
        return  (PX_ERROR);
    }

    curlRet = curl_easy_perform(curl);                            /*  完成傳輸函式                */
    if (curlRet != CURLE_OK) {
        fclose(fp);
        curl_easy_cleanup(curl);
        return  (PX_ERROR);
    }

    fclose(fp);
    curl_easy_cleanup(curl);                  		         /*  釋放記憶體                    */

    return  (ERROR_NONE);
}
/***************************************************************************
** 函式名稱: main
** 功能描述: 程序主函式
** 輸  入  : argc    入參個數
**           argv    入引數組
** 輸  出  : NONE
** 返  回  : ERROR_CODE
***************************************************************************/
int  main (int  argc, char  **argv)
{
    int  iRet = -1;

    printf("start download...\n");

    /*
     *  下載檔案
     *  UPDATE_URL       下載地址
     *  UPDATE_FILE_NAME 下載儲存檔名
     */
    iRet = fileDownload(UPDATE_URL, UPDATE_FILE_NAME);
    if (iRet != ERROR_NONE) {
        printf("file down failed\n");
        return  (PX_ERROR);
    }

    return  (ERROR_NONE);
}
參考資料:libcurl官網原始碼

相關推薦

通過curl下載檔案

1. 適用範圍      本文件介紹SylixOS下通過curl中介軟體下載檔案的流程,使用者應熟悉SylixOS以及curl中介軟體。2. 下載流程2.1 資源準備    檔案下載依賴curl中介軟體,故下載前需基於SylixOS進行curl中介軟體移植,移植過程本文件不做

利用curl下載檔案,包括Get和Post

#define STOP_DOWNLOAD_AFTER_THIS_MANY_BYTES         60000000000 #define MINIMAL_PROGRESS_FUNCTIONALITY_INTERVAL     3 &n

JSCH通過sftp下載檔案

此文轉載: 博文原地址:https://blog.csdn.net/sinat_34620530/article/details/54311732 尊重原創! 使用jsch通過ftps連線伺服器端下載檔案 Session session=jsch.getSession(ftpUserNa

【springmvc】通過POI下載檔案的實現過程

通過POI下載檔案的實現過程 整體程式碼實現思路 前臺程式碼 後臺程式碼 整體程式碼實現思路 首先在jsp頁面中,設定一個匯出功能按鈕,在匯出功能函式中,通過window.location.href的方式開啟一個新的頁面;

火狐瀏覽器js指令碼通過url下載檔案

if(isFirefox=navigator.userAgent.indexOf("Firefox")>0){ debugger var iframe = document.createElement("iframe") iframe

CentOS7.5 通過wget下載檔案到指定目錄

在Linux命令列下面下載檔案,通過wget是比較普遍簡單的,比如在CentOS7 裡面也一樣。 我們先來看下自己的CentOS7 系統有沒有安裝wget: [[email protected

curl 下載檔案失敗 如何排錯

最近用curl下載遠端檔案 , 下載後老顯示0kb , 之前一直下載正常 , 檢查發現 curl_error 沒有提示 curl_errno 是0 表示正常 最後通過 curl_getinfo 打印發現 httpd_code 為401 表示未認證 , 後來發現

通過連結下載檔案並儲存到本地

      在做微信的圖片上傳的時候,發現上傳的是臨時素材,我們需要從微信伺服器下載圖片並儲存到本地,所以涉及的就是通過連結下載檔案並儲存到本地的方法。 通過url下載的過程有如下幾步: (1)客戶端發起一個url請求,獲取連線物件。 (2)伺服器

通過okhttp3下載檔案實現APP版本更新

概況 思路是這樣的,首先在伺服器上把已經簽名打包的apk放上去,還有一份TXT檔案,檔案上寫著相關的版本號,然後客戶端通過對比版本號決定是否下載檔案。下載後就開啟安裝介面安裝。 第一步 把已經簽名打包apk和txt檔案放上到伺服器上,版本號要和t

js通過Url下載檔案

我們通過iframe到後臺請求一個下載,後臺通過流返回到瀏覽器,彈出儲存視窗。 js程式碼: function (){ var voiceUrl =baseURL+ "download";

linux 通過 tftp下載檔案

1、應用程式如何移植到目錄板? 1)複製到介質,如U盤 2)通過網路(tftp)傳輸檔案到開發板(檔案較小,推薦使用) 3)置於根檔案系統目錄下製作檔案系統映象,再燒進開發板(檔案很大,可以使用) 4)通過NFS(網路檔案系統) 直接執行 2、如何實現tftp傳輸?  要

通過Servlet實現檔案的上傳和下載

一、要實現Servlet的檔案上傳和下載,首先需要藉助第三方的jar包        二、Servlet的程式碼        package com.xh.web; import org.apache

前後臺互動實現點選超連結通過指定的 url 去網路或者檔案伺服器下載檔案

前臺 VUE 介面: <el-table-column prop="attachment" align="center" label="附件詳情"> <template slot-scope="scope"> <!--<el-button @

HTML實現通過超連結下載檔案,還附帶一些js輔助函式

下載檔案函式 download (src, fileName) { let $a = document.createElement('a'); $a.setAttribute('href', src); $a.setAttribute('download', fileName);

js通過URL下載伺服器檔案(可行方法)

本文講述已知檔案在伺服器的地址,如何下載至本地 其他部落格分享的一般是這兩種 1.通過window.open window.open('https://1.1.1.1/test.txt') 2.通過get表單請求 var $form = $('<form method=

axel: 多執行緒下載工具,下載檔案時可以替代curl、wget

 Axel 是 Linux 下一個不錯的HTTP/FTP高速下載工具。支援多執行緒下載、斷點續傳,且可以從多個地址或者從一個地址的多個連線來下載同一個檔案。適合網速不給力時多執行緒下載提高下載速度。比如在國內VPS或伺服器上下載lnmp一鍵安裝包用Axel就比wget快。opti

js通過URL下載伺服器檔案(URL為變數)

有時候我們得到的URL是動態獲取的,所以此時我們可以用如下方式設定檔案地址  <a :href ="'http://'+ip+'/test.txt'" download="test">

struts2下載檔案通過超連結下載亂碼

通過這種方式傳值,由於是URL方法傳遞,所以用post方法傳遞,所以getbytes方法修改無效,而Tomcat預設使用ISO-8859-1編碼,不支援中文 特別注意此處的兩個選中部位 修改後下載正常

Java通過http協議下載檔案並寫入位元組流的方法

 最近寫微服務,從服務端通過http協議下載檔案並寫入位元組流。開始以為很簡單。直接上手就來了,程式碼如下: String szHttpFile="http://..../downlaod&&fileId="+fileId+"&&extra[a

通過IO流的方式從WebApp裡面下載檔案

從WebApp裡面下載Excel檔案,檔案路徑: 1.Controller層程式碼: /** * 裝置管理——匯入模板下載 * * @param requestType 下載標記 *