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;
}