客戶端七牛方式上傳文件

 

上傳流程

在七牛雲存儲中,整個上傳流程大致分爲以下幾步:

  1. 業務服務器頒發上傳憑證給客戶端(終端用戶)

  2. 客戶端憑藉上傳憑證上傳文件到七牛

  3. 在七牛獲得完整數據後,發起一個 HTTP 請求回調到業務服務器

  4. 業務服務器保存相關信息,並返回一些信息給七牛

  5. 七牛原封不動地將這些信息轉發給客戶端(終端用戶)

 

注意:回調到業務服務器的過程是可選的,它取決於業務服務器頒發的上傳憑證。如果沒有回調,七牛會返回一些標準的信息(例如文件的 hash)給客戶端。

如果上傳不回調給服務器,以上流程簡化爲:

  1. 業務服務器生成上傳憑證

  2. 憑藉上傳憑證上傳文件到七牛

  3. 後續工作,例如保存一些相關信息

 

代碼

Qiniu_Io_PutFile 用於普通上傳,Qiniu_Rio_PutFile 斷點續上傳,如果服務器的token有回調,則Qiniu_Rio_PutRet的key爲空,如果服務器的token沒有回調,則key不爲空,是上傳地址的標識,然後文件的地址格式大概是 http://qiniu.服務器地址/key,這樣可以訪問到上傳的文件。

Qiniu_Global_Init(-1);     /* 全局初始化函數,整個進程只需要調用一次 */
// 參數:文件路徑,服務器提供的token,及用於返回key的引用
int upload(QString localFilePath,QString token,QString& key)
{

    Qiniu_Client* client = new Qiniu_Client;
    if(client)
    {
        /* HTTP客戶端初始化。HTTP客戶端是線程不安全的,不要在多個線程間共用 */
        Qiniu_Client_InitNoAuth(client, 1024); 

    }

    Qiniu_Error err;
    Qiniu_Rio_PutExtra extra;
    Qiniu_Zero(extra);
    Qiniu_Rio_PutRet putRet;

    err = Qiniu_Rio_PutFile(m_Client,
                            &putRet,
                            qPrintable(token),
                            NULL,
                            qPrintable(localFilePath),
                            &extra);
//    Qiniu_Io_PutRet putRet;
//    err = Qiniu_Io_PutFile(m_Client,
//                           &putRet,
//                           qPrintable(token),
//                           NULL,
//                           qPrintable(localFilePath),
//                           NULL);
    qInfo("hash and key %s %s",putRet.hash,putRet.key);
    if(err.code != 200)
    {
        qInfo("qiniu upload fail:[%d]%s",err.code,err.message);
        if(err.code==0) return -1;
        return err.code;
    }
    else
    {
        if(putRet.key != "")
        {
            key = putRet.key;
        }
    }
    return 0;
}

上傳地址錯誤

如果提示上傳地址出錯,比如 incorrect region, please use up-z2.qiniup.com

需要在conf.c文件更更換默認的地址(可能還需要更新sdk),此地址是對應服務器的所選擇的七牛的存儲服務器,例如:

//默認華東機房

const char *QINIU_UP_HOST = "http://upload-z2.qiniu.com";

const char *QINIU_IOVIP_HOST = "http://iovip-z2.qbox.me";

代碼參考:

https://github.com/fengxieye/Qt-item/blob/master/GCUpload/GCQiniuUpload.cpp

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章