diff --git a/interfaces/innerkits/native/file_uri/src/file_uri.cpp b/interfaces/innerkits/native/file_uri/src/file_uri.cpp index b0463308bcd50286465186bed6d3cf8799601f37..abef756080094e5c8f383a5506efe43f44333ca4 100644 --- a/interfaces/innerkits/native/file_uri/src/file_uri.cpp +++ b/interfaces/innerkits/native/file_uri/src/file_uri.cpp @@ -32,6 +32,7 @@ const std::string MODE_RW = "/rw/"; const std::string MODE_R = "/r/"; const std::string FILE_SCHEME_PREFIX = "file://"; const std::string FILE_MANAGER_AUTHORITY = "docs"; +const std::string MEDIA_AUTHORITY = "media"; string FileUri::GetName() { string sandboxPath = uri_.GetPath(); @@ -49,7 +50,14 @@ string FileUri::GetName() string FileUri::GetPath() { - return SandboxHelper::Decode(uri_.GetPath()); + string sandboxPath = SandboxHelper::Decode(uri_.GetPath()); + string bundleName = uri_.GetAuthority(); + if (bundleName == MEDIA_AUTHORITY && sandboxPath.find(".") != string::npos) { + size_t pos = sandboxPath.rfind("/"); + return sandboxPath.substr(0, pos); + } + + return sandboxPath; } string FileUri::GetRealPath() diff --git a/interfaces/kits/js/file_share/grant_uri_permission.cpp b/interfaces/kits/js/file_share/grant_uri_permission.cpp index 6f4d50ad6cd8913ae31a6cfa7eff51389e4b3590..33c1ddc11a72b96bcd15a185451bd918c978b586 100644 --- a/interfaces/kits/js/file_share/grant_uri_permission.cpp +++ b/interfaces/kits/js/file_share/grant_uri_permission.cpp @@ -44,33 +44,20 @@ namespace ModuleFileShare { string uri; }; - static bool IsAllDigits(string idStr) - { - for (size_t i = 0; i < idStr.size(); i++) { - if (!isdigit(idStr[i])) { - return false; - } - } - return true; - } - static bool IsSystemApp() { uint64_t fullTokenId = OHOS::IPCSkeleton::GetCallingFullTokenID(); return Security::AccessToken::TokenIdKit::IsSystemAppByFullTokenID(fullTokenId); } - static string GetIdFromUri(string uri) + static int32_t GetIdFromUri(string uri) { - string rowNum = ""; - size_t pos = uri.rfind('/'); - if (pos != string::npos) { - rowNum = uri.substr(pos + 1); - if (!IsAllDigits(rowNum)) { - rowNum = ""; - } - } - return rowNum; + std::replace(uri.begin(), uri.end(), '/', ' '); + stringstream ss(uri); + string tmp; + int fileId = -1; + ss >> tmp >> tmp >> tmp >> fileId; + return fileId; } static string GetModeFromFlag(unsigned int flag) @@ -146,13 +133,12 @@ namespace ModuleFileShare { static int InitValuesBucket(const UriPermissionInfo &uriPermInfo, Uri &uri, bool &isApi10, DataShareValuesBucket &valuesBucket) { - string idStr = GetIdFromUri(uriPermInfo.uri); - if (idStr == "") { + int32_t fileId = GetIdFromUri(uriPermInfo.uri); + if (fileId == -1) { LOGE("FileShare::InitValuesBucket get fileId parameter failed!"); return -EINVAL; } - int32_t fileId = stoi(idStr); int32_t filesType = GetMediaTypeAndApiFromUri(uri.GetPath(), isApi10); valuesBucket.Put(PERMISSION_FILE_ID, fileId); valuesBucket.Put(PERMISSION_BUNDLE_NAME, uriPermInfo.bundleName); @@ -189,8 +175,8 @@ namespace ModuleFileShare { int ret = uriPermissionClient.GrantUriPermission(uri, uriPermInfo.flag, uriPermInfo.bundleName, 1); if (ret != 0) { - LOGE("uriPermissionClient.GrantUriPermission failed!"); - return -EINVAL; + LOGD("uriPermissionClient.GrantUriPermission by uri permission client failed!"); + return GrantInMediaLibrary(uriPermInfo, uri); } } @@ -285,6 +271,7 @@ namespace ModuleFileShare { LOGE("FileShare::GrantUriPermission DoGrantUriPermission failed with %{public}d", ret); return NError(-ret); } + LOGD("FileShare::GrantUriPermission DoGrantUriPermission successfully!"); return NError(ERRNO_NOERR); };