Hướng dẫn này giải thích cách API Google Drive hỗ trợ một số cách tìm kiếm tệp và thư mục.
Bạn có thể sử dụng phương thức list trên tài nguyên files để trả về tất cả hoặc một số tệp và thư mục của người dùng Drive. Bạn cũng có thể dùng phương thức list để truy xuất fileId cần thiết cho một số phương thức tài nguyên (chẳng hạn như phương thức get và update).
Sử dụng tham số fields
Nếu muốn chỉ định các trường cần trả về trong phản hồi, bạn có thể đặt fields tham số hệ thống bằng bất kỳ phương thức nào của tài nguyên files. Nếu bạn bỏ qua tham số fields, máy chủ sẽ trả về một tập hợp các trường mặc định dành riêng cho phương thức. Ví dụ: phương thức list chỉ trả về các trường kind, id, name, mimeType và resourceKey cho mỗi tệp. Để trả về các trường khác nhau, hãy xem phần Trả về các trường cụ thể.
Lấy tệp theo mã nhận dạng
Để lấy một tệp, hãy sử dụng phương thức get trên tài nguyên files bằng tham số đường dẫn fileId.
Nếu không biết mã nhận dạng tệp, bạn có thể liệt kê tất cả các tệp bằng phương thức list.
Phương thức này trả về tệp dưới dạng một thực thể của tài nguyên files. Nếu bạn cung cấp tham số alt=media, thì phản hồi sẽ bao gồm nội dung tệp trong nội dung phản hồi. Để tải tệp blob xuống, hãy xem phần Tải nội dung tệp blob xuống.
Để xác nhận rủi ro khi tải phần mềm độc hại đã biết hoặc các tệp có hành vi sai trái khác xuống, hãy đặt tham số truy vấn acknowledgeAbuse thành true. Trường này chỉ áp dụng khi bạn đặt tham số alt=media và người dùng là chủ sở hữu tệp hoặc người tổ chức của bộ nhớ dùng chung nơi tệp đó lưu trú.
Liệt kê tất cả tệp và thư mục trong Drive của tôi
Sử dụng phương thức list mà không có bất kỳ tham số nào để trả về tất cả các tệp và thư mục trong Drive của tôi của người dùng hiện tại.
Lệnh curl sau đây cho biết cách liệt kê tất cả các tệp:
curl -X GET \
'https://www.googleapis.com/drive/v3/files' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Accept: application/json'
Thay thế ACCESS_TOKEN bằng một mã truy cập OAuth 2.0 được uỷ quyền.
Tìm các tệp và thư mục cụ thể trong Drive của tôi
Để tìm một nhóm tệp hoặc thư mục cụ thể trong phần My Drive của người dùng hiện tại, hãy sử dụng trường chuỗi truy vấn q với phương thức list để lọc các tệp cần trả về bằng cách kết hợp một hoặc nhiều cụm từ tìm kiếm.
Cú pháp chuỗi truy vấn bao gồm 3 phần sau:
query_term operator values
Trong trường hợp:
query_termlà cụm từ hoặc trường truy vấn để tìm kiếm.operatorchỉ định điều kiện cho cụm từ tìm kiếm.valueslà những giá trị cụ thể mà bạn muốn dùng để lọc kết quả tìm kiếm.
Ví dụ: chuỗi truy vấn sau đây sẽ lọc nội dung tìm kiếm để chỉ trả về các thư mục bằng cách đặt loại MIME:
mimeType = 'application/vnd.google-apps.folder'
Để xem tất cả cụm từ tìm kiếm tệp, hãy xem Cụm từ tìm kiếm dành riêng cho tệp.
Để xem tất cả các toán tử truy vấn mà bạn có thể dùng để tạo truy vấn, hãy xem Toán tử truy vấn.
Ví dụ về chuỗi truy vấn
Bảng sau đây liệt kê ví dụ về một số chuỗi truy vấn cơ bản. Mã thực tế sẽ khác nhau, tuỳ thuộc vào thư viện ứng dụng mà bạn sử dụng cho cụm từ tìm kiếm.
Bạn cũng phải thoát các ký tự đặc biệt trong tên tệp để đảm bảo truy vấn hoạt động chính xác. Ví dụ: nếu tên tệp chứa cả dấu nháy đơn (') và dấu gạch chéo ngược ("\"), hãy dùng dấu gạch chéo ngược để thoát các ký tự đó: name
contains 'quinn\'s paper\\essay'.
| Nội dung cần truy vấn | Ví dụ |
|---|---|
Toán tử so khớp chuỗi (contains) |
|
| Các tệp có chứa từ "hello" | fullText contains 'hello' |
| Các tệp chứa cụm từ chính xác "hello world" | fullText contains '"hello world"' |
| Tệp có cụm từ tìm kiếm chứa ký tự "\" (ví dụ: "\authors") | fullText contains '\\authors' |
| Tệp có tên chứa từ "ngân sách" | name contains 'budget' |
Toán tử bằng và không bằng (=, !=) |
|
| Các tệp có tên "hello" | name = 'hello' |
| Tệp là thư mục | mimeType = 'application/vnd.google-apps.folder' |
| Tệp không phải là thư mục | mimeType != 'application/vnd.google-apps.folder' |
| Tệp có gắn dấu sao | starred = true |
| Tệp trong thùng rác | trashed = true |
| Tệp không nằm trong thùng rác | trashed = false |
| Lối tắt trỏ đến một mã nhận dạng tệp cụ thể | shortcutDetails.targetId = '1987654321' |
| Tệp chưa được chia sẻ với bất kỳ người dùng hoặc miền nào (riêng tư hoặc được chia sẻ với người dùng hoặc nhóm cụ thể) | visibility = 'limited' |
| Tệp mà bất kỳ ai có đường liên kết đều có thể truy cập | visibility = 'anyoneWithLink' |
| Tệp mà mọi người có thể tìm thấy công khai trên web | visibility = 'anyoneCanFind' |
Toán tử so sánh (>, >=, <, <=) |
|
| Các tệp được sửa đổi sau một ngày nhất định (múi giờ mặc định là UTC) | modifiedTime > '2012-06-04T12:00:00' |
| Tệp được tạo sau ngày 1 tháng 1 năm 2023 | createdTime > '2023-01-01T00:00:00' |
| Tệp được sửa đổi trước ngày 1 tháng 1 năm 2023 | modifiedTime < '2023-01-01T00:00:00' |
Toán tử thành viên của tập hợp (in) |
|
Tệp trong một bộ sưu tập (ví dụ: mã nhận dạng thư mục trong bộ sưu tập parents) |
'1234567' in parents |
| Tệp trong thư mục dữ liệu ứng dụng | 'appDataFolder' in parents |
| Các tệp mà người dùng "test@example.org" là chủ sở hữu | 'test@example.org' in owners |
| Các tệp mà người dùng "test@example.org" có quyền ghi | 'test@example.org' in writers |
| Các tệp mà thành viên của nhóm "group@example.org" có quyền ghi | 'group@example.org' in writers |
| Các tệp mà người dùng "test@example.org" có quyền đọc | 'test@example.org' in readers |
Toán tử so khớp tập hợp (has) |
|
| Các tệp có thuộc tính tệp tuỳ chỉnh mà tất cả ứng dụng đều có thể nhìn thấy | properties has { key='mass' and value='1.3kg' } |
| Tệp có một thuộc tính tệp tuỳ chỉnh riêng tư đối với ứng dụng yêu cầu | appProperties has { key='additionalID' and value='8e8aceg2af2ge72e78' } |
| Những tệp có một thuộc tính tuỳ chỉnh của tệp với khoá "department" (bất kể giá trị) | properties has { key='department' } |
Toán tử logic (and, or, not) |
|
| Các tệp có tên chứa các từ "hello" và "goodbye" | name contains 'hello' and name contains 'goodbye' |
| Tệp có tên không chứa từ "hello" | not name contains 'hello' |
| Các tệp có chứa văn bản "quan trọng" và nằm trong thùng rác | fullText contains 'important' and trashed = true |
| Các tệp không chứa từ "hello" | not fullText contains 'hello' |
| Tệp hình ảnh hoặc video được sửa đổi sau một ngày cụ thể | modifiedTime > '2012-06-04T12:00:00' and (mimeType contains 'image/' or mimeType contains 'video/') |
| Những tệp được chia sẻ với người dùng được uỷ quyền có tên chứa "hello" | sharedWithMe and name contains 'hello' |
| Tệp là thư mục hoặc lối tắt | mimeType = 'application/vnd.google-apps.folder' or mimeType = 'application/vnd.google-apps.shortcut' |
| Những tệp có tên "Kế hoạch dự án" không nằm trong thùng rác | name = 'Project Plan' and trashed = false |
| Tệp trong một thư mục cụ thể không nằm trong thùng rác | '1234567' in parents and trashed = false |
Lọc kết quả tìm kiếm bằng thư viện ứng dụng
Đoạn mã mẫu sau đây cho thấy cách dùng một thư viện ứng dụng để lọc kết quả tìm kiếm theo tên tệp và mã nhận dạng của tệp JPEG. Mẫu này sử dụng cụm từ tìm kiếm mimeType để thu hẹp kết quả thành các tệp thuộc loại image/jpeg. Thao tác này cũng đặt spaces thành drive để thu hẹp phạm vi tìm kiếm hơn nữa thành không gian trên Drive. Khi nextPageToken trả về null, tức là không còn kết quả nào khác.
Java
Python
Node.js
PHP
Liệt kê tệp trong thư mục công khai
Để tìm kiếm hoặc liệt kê các tệp trong một thư mục được chia sẻ công khai (nơi quyền truy cập được đặt thành "Bất kỳ ai có đường liên kết" hoặc "Công khai trên web"), hãy sử dụng phương thức list trên tài nguyên files với tham số truy vấn q được đặt để lọc theo mã nhận dạng của thư mục trong tập hợp parents:
'FOLDER_ID' in parents and trashed = false
Khi liệt kê các tệp trong một thư mục công khai, bạn có thể xác thực các yêu cầu bằng khoá API thay vì thông tin xác thực người dùng OAuth 2.0. Nếu thư mục nằm trong bộ nhớ dùng chung, bạn cũng phải đặt supportsAllDrives=true và includeItemsFromAllDrives=true trên yêu cầu.
Các mẫu mã sau đây cho biết cách liệt kê các tệp trong một thư mục công khai:
Node.js
/**
* List files in a public folder using an API key.
* @param {string} folderId The ID of the public folder.
* @param {string} apiKey Your Google Cloud API key.
* @return {Promise<Array>} The list of files.
*/
async function listPublicFolder(folderId, apiKey) {
const {google} = require('googleapis');
const service = google.drive({version: 'v3', auth: apiKey});
try {
const response = await service.files.list({
q: `'${folderId}' in parents and trashed = false`,
fields: 'nextPageToken, files(id, name, mimeType)',
supportsAllDrives: true,
includeItemsFromAllDrives: true,
});
const files = response.data.files;
console.log('Files:');
for (const file of files) {
console.log(`${file.name} (${file.id})`);
}
return files;
} catch (err) {
// TODO(developer): Handle error
console.error(err);
}
}
curl
curl -G \
'https://www.googleapis.com/drive/v3/files' \
--data-urlencode "q='FOLDER_ID' in parents and trashed = false" \
--data-urlencode 'supportsAllDrives=true' \
--data-urlencode 'includeItemsFromAllDrives=true' \
--data-urlencode 'fields=nextPageToken,files(id,name,mimeType)' \
--data-urlencode 'key=API_KEY' \
-H 'Accept: application/json'
Thay thế nội dung sau:
- FOLDER_ID: Mã nhận dạng của thư mục công khai.
- API_KEY: Khoá API của dự án.
Tìm tệp có thuộc tính tuỳ chỉnh
Để tìm tệp có thuộc tính tệp tuỳ chỉnh, hãy sử dụng cụm từ tìm kiếm properties hoặc appProperties cùng với khoá và giá trị. Ví dụ: để tìm kiếm một thuộc tính tệp tuỳ chỉnh ở chế độ riêng tư cho ứng dụng yêu cầu có tên là additionalID với giá trị là 8e8aceg2af2ge72e78:
appProperties has { key='additionalID' and value='8e8aceg2af2ge72e78' }
Để biết thêm thông tin, hãy xem bài viết Thêm thuộc tính tuỳ chỉnh cho tệp.
Tìm tệp theo nhãn hoặc giá trị trường
Để tìm tệp có nhãn cụ thể, hãy sử dụng cụm từ tìm kiếm labels cùng với một mã nhãn cụ thể.
Cách tìm tệp có một nhãn cụ thể:
'labels/LABEL_ID' in labels
Cách tìm các tệp chưa được áp dụng một nhãn cụ thể:
not 'labels/LABEL_ID' in labels
Cách tìm tệp dựa trên một giá trị trường nhãn cụ thể:
labels/LABEL_ID.FIELD_ID = 'VALUE'
Nếu thành công, nội dung phản hồi sẽ chứa tất cả các phiên bản tệp khớp với truy vấn. Để biết thêm thông tin, hãy xem phần Tìm tệp có nhãn hoặc giá trị trường cụ thể.
Tìm kiếm trên nhiều tập hợp văn bản
Theo mặc định, bộ sưu tập mặt hàng user được đặt trên tham số truy vấn corpora khi phương thức list được dùng. Để tìm kiếm các tập hợp mục khác, chẳng hạn như những tập hợp được chia sẻ với domain, bạn phải đặt rõ tham số corpora.
Bạn có thể tìm kiếm nhiều ngữ liệu trong một truy vấn duy nhất; tuy nhiên, nếu ngữ liệu kết hợp quá lớn, API có thể trả về kết quả không đầy đủ. Kiểm tra trường incompleteSearch trong nội dung phản hồi. Nếu là true, thì một số tài liệu đã bị bỏ qua. Để giải quyết vấn đề này, hãy thu hẹp corpora để sử dụng user hoặc drive.
Khi sử dụng tham số truy vấn orderBy trên phương thức list, hãy tránh sử dụng khoá createdTime cho các truy vấn trên các bộ sưu tập lớn vì khoá này yêu cầu xử lý thêm và có thể dẫn đến hết thời gian chờ hoặc các vấn đề khác. Đối với việc sắp xếp theo thời gian trên các bộ sưu tập lớn gồm nhiều mặt hàng, bạn có thể sử dụng modifiedTime vì thành phần này được tối ưu hoá để xử lý các truy vấn này.
Ví dụ: đặt orderBy thành modifiedTime (hoặc modifiedTime desc).
Nếu bạn bỏ qua tham số truy vấn orderBy, thì sẽ không có thứ tự sắp xếp mặc định và các mục sẽ được trả về tuỳ ý.
Chủ đề có liên quan
- Tìm bộ nhớ dùng chung
- Cụm từ và toán tử trong cụm từ tìm kiếm
- Các loại MIME được Google Workspace và Google Drive hỗ trợ
- Vai trò và quyền
- Tìm tệp có nhãn hoặc giá trị trường cụ thể