std::string FileSample::FileCreate()

in sample/src/file/FileSample.cc [33:101]


std::string FileSample::FileCreate()
{
    time_t lastMtime;
    std::streamsize fSize;
    if (!GetPathInfo(Config::FileToUpload, lastMtime, fSize)) {
        PrintError(__FUNCTION__, PdsError("FileNotFound", "upload file is not found"));
    }
    uint64_t fileSize = static_cast<uint64_t>(fSize);

    // PDS create
    std::string fileID;
    FileCreateRequest createRequest(Config::DriveID, Config::RootParentID, "test_file", "", "auto_rename", fileSize);

    // set user tags when create
    UserTagList userTagList;
    UserTag userTag("key", "value");
    userTagList.push_back(userTag);
    createRequest.setUserTags(userTagList);

    auto createOutcome = client->FileCreate(createRequest);
    if (!createOutcome.isSuccess()) {
        PrintError(__FUNCTION__, createOutcome.error());
        return fileID;
    }
    fileID = createOutcome.result().FileID();
    std::string uploadID = createOutcome.result().UploadID();
    std::cout << __FUNCTION__ << " call FileCreate success, file id: " << fileID << ", upload id: " << uploadID << std::endl;

    // PDS get upload url
    PartInfoReqList partInfoReqList;
    PartInfoReq info(1, fileSize, 0, fileSize-1);
    partInfoReqList.push_back(info);

    FileGetUploadUrlRequest getUploadUrlRequest(Config::DriveID, fileID, uploadID, partInfoReqList);
    auto getUploadUrlOutcome = client->FileGetUploadUrl(getUploadUrlRequest);
    if (!getUploadUrlOutcome.isSuccess()) {
        PrintError(__FUNCTION__, getUploadUrlOutcome.error());
        return fileID;
    }
    std::cout << __FUNCTION__ << " call FileGetUploadUrl success" << std::endl;

    PartInfoRespList partInfoRespList = getUploadUrlOutcome.result().PartInfoRespList();
    if (partInfoRespList.size() == 0) {
        std::cout << __FUNCTION__ << " partInfoRespList empty" << std::endl;
        return fileID;
    }
    std::string uploadURl = partInfoRespList[0].UploadUrl();
    std::cout << __FUNCTION__ << " upload url: " << uploadURl << std::endl;

    // upload to OSS
    std::shared_ptr<std::iostream> content = std::make_shared<std::fstream>(Config::FileToUpload, std::ios::in | std::ios::binary);
    DataPutByUrlRequest uploadDataRequest(uploadURl, content);
    auto uploadDataOutcome = client->DataPutByUrl(uploadDataRequest);
    if (!uploadDataOutcome.isSuccess()) {
        PrintError(__FUNCTION__, uploadDataOutcome.error());
        return fileID;
    }
    std::cout << __FUNCTION__ << " upload data success" << std::endl;

    // PDS complete
    FileCompleteRequest completeRequest(Config::DriveID, fileID, uploadID);
    auto completeOutcome = client->FileComplete(completeRequest);
    if (!completeOutcome.isSuccess()) {
        PrintError(__FUNCTION__, completeOutcome.error());
        return fileID;
    }
    std::cout << __FUNCTION__ << " call FileComplete success, file id: " << fileID << ", name: " << completeOutcome.result().Name() << std::endl;
    return fileID;
}