#java #class #google-drive-api #filepath
#java #класс #google-drive-api #путь к файлу
Вопрос:
Я пытаюсь вернуть и получить путь к папке файла Google Диска. Я передаю входные данные: идентификатор папки, имя файла и токен oauth.
{ «id»: «1dVkHw5442B7wMidj», «name»: «Path» }
Класс, который я использую ниже:
public static List<File> Search(Object payload,String oauthToken) {
List<File> list = new ArrayList<File>();
List<File> subfolderlist = new ArrayList<File>();
List<File> subQuerylist = new ArrayList<File>();
GoogleCredential credential = new GoogleCredential();
credential.setAccessToken(oauthToken);
try {
_driveService = new Drive.Builder(GoogleNetHttpTransport.newTrustedTransport(), JacksonFactory.getDefaultInstance(), credential).setApplicationName(appName).build();
} catch (GeneralSecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
String filename ="";String mimeType ="";
String modifiedFrom ="";String modifiedTo ="";String fullText ="";
ObjectMapper mapper = new ObjectMapper();
String jsonString =null; String paramquery ="";
jsonString = mapper.writeValueAsString(payload);
JSONObject jsonObject = new JSONObject(jsonString);
String parentId = jsonObject.getString("id");
if(!jsonObject.isNull("name")){
filename = jsonObject.getString("name");
paramquery =" and ( name contains '" filename "' or fullText contains '" filename "')";
}
if(!jsonObject.isNull("content")){
fullText = jsonObject.getString("content");
paramquery =" and fullText contains '" fullText "'";
}
if(!jsonObject.isNull("mimeType")){
mimeType = jsonObject.getString("mimeType");
if(mimeType.equals("AllFiles") ){
paramquery =" and mimeType != 'application/vnd.google-apps.folder'";
}else {
paramquery =" and mimeType = '" mimeType "'";
}
}
if(!jsonObject.isNull("modifiedFrom")){
modifiedFrom = jsonObject.getString("modifiedFrom");
paramquery =" and modifiedTime > '" modifiedFrom "'";
}
if(!jsonObject.isNull("modifiedTo")){
modifiedTo = jsonObject.getString("modifiedTo");
paramquery =" and modifiedTime < '" modifiedTo "'";
}
String subfolderquery = " and mimeType = 'application/vnd.google-apps.folder'";
subfolderlist = ExecQuery(_driveService,subfolderquery,parentId);
list = ExecQuery(_driveService,paramquery,parentId);
int i = 0;
while (i < subfolderlist.size()) {
File file = subfolderlist.get(i);
subQuerylist = ExecQuery(_driveService,subfolderquery,file.getId());
if(!subQuerylist.isEmpty()) {
subfolderlist.addAll(subQuerylist);
}
i ;
}
int j = 0;
while (j < subfolderlist.size()) {
File file = subfolderlist.get(j);
subQuerylist = ExecQuery(_driveService,paramquery,file.getId());
if(!subQuerylist.isEmpty()) {
list.addAll(subQuerylist);
}
j ;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
Но он возвращает мне только сведения о файле и идентификатор родительской папки.
Как я могу получить полный путь к файлу?
Ответ №1:
Файлы и папки на диске не имеют путей
У них есть родители, но родительским элементом является свойство, а не местоположение файла. Пути, предполагаемые путем следования вложенности папок и вложенных папок, носят творческий характер.
Причина, по которой файл Google Диска не может иметь путь, заключается в том, что в одной папке могут быть два разных файла разного mimeType с одинаковым именем. Также на данный момент (будет устаревшим в будущем) у файла может быть одновременно несколько родителей.
Самое близкое, что вы можете сделать, чтобы понять иерархию вложенности файлов во вложенных папках, — это итеративно перебирать родительский родительский файл, пока не дойдете до root
— «Мой диск».