Interfejs Google Drive API umożliwia przesyłanie danych pliku podczas tworzenia lub aktualizowania File
. Informacje o tym, jak utworzyć plik zawierający tylko metadane, np. folder, znajdziesz w artykule Tworzenie plików zawierających tylko metadane.
Możesz przeprowadzić 3 rodzaje przesyłania:
Proste przesyłanie (
uploadType=media
): użyj tego typu przesyłania, aby przenieść mały plik multimedialny (o rozmiarze nie większym niż 5 MB) bez podawania metadanych. Aby wykonać proste przesyłanie, zapoznaj się z artykułem Wykonywanie prostego przesyłania.Przesyłanie wieloczęściowe (
uploadType=multipart
): „Użyj tego typu przesyłania, aby przesłać mały plik (o rozmiarze do 5 MB) wraz z metadanymi opisującymi plik w ramach jednego żądania. Aby wykonać przesyłanie wieloczęściowe, zapoznaj się z artykułem Przeprowadzanie przesyłania wieloczęściowego.Wznawialne przesyłanie (
uploadType=resumable
): używaj tego typu przesyłania w przypadku dużych plików (powyżej 5 MB) oraz gdy istnieje duże prawdopodobieństwo przerwania połączenia sieciowego, np. podczas tworzenia pliku w aplikacji mobilnej. Wznawialne przesyłanie jest też dobrym wyborem w przypadku większości aplikacji, ponieważ działa również w przypadku małych plików przy minimalnym koszcie jednego dodatkowego żądania HTTP na przesyłanie. Aby przeprowadzić przesyłanie z możliwością wznowienia, przeczytaj artykuł Przeprowadzanie przesyłania z możliwością wznowienia.
Biblioteki klienta interfejsu API Google implementują co najmniej jeden z tych typów przesyłania. Więcej informacji o korzystaniu z poszczególnych typów znajdziesz w dokumentacji biblioteki klienta.
Używanie PATCH
a PUT
Przypomnijmy, że czasownik HTTP PATCH
obsługuje częściową aktualizację zasobu pliku, a czasownik HTTP PUT
obsługuje pełną wymianę zasobu. Pamiętaj, że PUT
może wprowadzać zmiany powodujące niezgodność wsteczną podczas dodawania nowego pola do istniejącego zasobu.
Podczas przesyłania zasobu pliku postępuj zgodnie z tymi wytycznymi:
- W przypadku początkowego żądania przesyłania z możliwością wznowienia lub jedynego żądania przesyłania prostego lub wieloczęściowego użyj czasownika HTTP udokumentowanego w dokumentacji interfejsu API.
- Używaj
PUT
we wszystkich kolejnych żądaniach przesyłania z możliwością wznowienia po rozpoczęciu żądania. Te żądania przesyłają treści niezależnie od wywoływanej metody.
Przeprowadzanie prostego przesyłania
Aby wykonać proste przesyłanie, użyj metody files.create
z parametrem uploadType=media
.
Poniżej pokazujemy, jak wykonać proste przesyłanie:
HTTP
Wyślij żądanie
POST
do identyfikatora URI /upload metody z parametrem zapytaniauploadType=media
:POST https://www.googleapis.com/upload/drive/v3/files?uploadType=media
Dodaj dane pliku do treści żądania.
Dodaj te nagłówki HTTP:
Content-Type
. Ustaw na typ MIME przesyłanego obiektu.Content-Length
. Ustaw na liczbę przesyłanych bajtów. Jeśli używasz kodowania przesyłania fragmentami, ten nagłówek nie jest wymagany.
Wyślij prośbę. Jeśli żądanie zakończy się powodzeniem, serwer zwróci kod stanu
HTTP 200 OK
wraz z metadanymi pliku. {HTTP}
Podczas prostego przesyłania tworzone są podstawowe metadane, a niektóre atrybuty są wywnioskowane z pliku, np. typ MIME lub modifiedTime
. Prostego przesyłania możesz używać w przypadku małych plików, gdy metadane plików nie są ważne.
Przeprowadzanie przesyłania wieloczęściowego
Żądanie przesyłania wieloczęściowego umożliwia przesyłanie metadanych i danych w ramach tego samego żądania. Użyj tej opcji, jeśli wysyłane dane są wystarczająco małe, aby w razie niepowodzenia połączenia można było je ponownie przesłać w całości.
Aby wykonać przesyłanie wieloczęściowe, użyj metody
files.create
z parametrem
uploadType=multipart
.
Poniżej pokazujemy, jak wykonać przesyłanie wieloczęściowe:
Java
Python
Node.js
PHP
.NET
HTTP
Wyślij żądanie
POST
do identyfikatora URI /upload metody z parametrem zapytaniauploadType=multipart
:POST https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart
Utwórz treść żądania. Sformatuj treść zgodnie z typem treści multipart/related RFC 2387, który zawiera 2 części:
- Metadane Metadane muszą być na początku i muszą mieć nagłówek ustawiony na
application/json;
charset=UTF-8
.Content-Type
Dodaj metadane pliku w formacie JSON. - Multimedia. Media muszą być na drugim miejscu i muszą mieć nagłówek
Content-Type
dowolnego typu MIME. Dodaj dane pliku do części dotyczącej mediów.
Każdą część oznacz ciągiem ograniczającym poprzedzonym dwoma łącznikami. Dodatkowo po ostatnim ciągu znaków granicznych dodaj 2 łączniki.
- Metadane Metadane muszą być na początku i muszą mieć nagłówek ustawiony na
Dodaj te nagłówki HTTP najwyższego poziomu:
Content-Type
. Ustaw wartośćmultipart/related
i uwzględnij ciąg znaków granicznych, którego używasz do identyfikowania różnych części żądania. Przykład:Content-Type: multipart/related; boundary=foo_bar_baz
Content-Length
. Ustaw na łączną liczbę bajtów w treści żądania.
Wyślij prośbę.
Aby utworzyć lub zaktualizować tylko część metadanych bez powiązanych danych, wyślij żądanie POST
lub PATCH
do standardowego punktu końcowego zasobu:https://www.googleapis.com/drive/v3/files
Jeśli żądanie się powiedzie, serwer zwróci kod stanu HTTP 200 OK
wraz z metadanymi pliku.
Podczas tworzenia plików powinni oni określić rozszerzenie pliku w name
. Na przykład podczas tworzenia pliku JPEG ze zdjęciem możesz w metadanych określić coś takiego: "name": "photo.jpg"
. Kolejne wywołania funkcji files.get
zwracają właściwość fileExtension
tylko do odczytu, która zawiera rozszerzenie pierwotnie określone w polu name
.
Przeprowadzanie przesyłania z możliwością wznowienia
Przesyłanie z możliwością wznowienia pozwala wznowić operację przesyłania po przerwaniu przepływu danych z powodu błędu komunikacji. Nie musisz ponownie przesyłać dużych plików od początku, więc wznawialne przesyłanie może też zmniejszyć zużycie przepustowości w przypadku awarii sieci.
Wznawialne przesyłanie jest przydatne, gdy rozmiary plików mogą się znacznie różnić lub gdy istnieje stały limit czasu dla żądań (np. w przypadku zadań w tle w mobilnych systemach operacyjnych i niektórych żądań App Engine). Przesyłanie możliwe do wznowienia możesz też stosować w sytuacjach, w których chcesz wyświetlać pasek postępu przesyłania.
Przesyłanie z możliwością wznowienia składa się z kilku etapów:
- Wyślij pierwsze żądanie i pobierz identyfikator URI sesji z możliwością wznowienia.
- Prześlij dane i monitoruj stan przesyłania.
- (opcjonalnie) Jeśli przesyłanie zostanie przerwane, wznow je.
Wysyłanie wstępnej prośby
Aby rozpocząć przesyłanie możliwe do wznowienia, użyj metody files.create
z parametrem uploadType=resumable
.
HTTP
Wyślij żądanie
POST
do identyfikatora URI /upload metody z parametrem zapytaniauploadType=resumable
:POST https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable
Jeśli żądanie inicjujące zakończy się powodzeniem, odpowiedź będzie zawierać kod stanu HTTP
200 OK
. Dodatkowo zawiera nagłówekLocation
, który określa identyfikator URI sesji z możliwością wznowienia:HTTP/1.1 200 OK Location: https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable&upload_id=xa298sd_sdlkj2 Content-Length: 0
Zapisz identyfikator URI sesji z możliwością wznowienia, aby móc przesyłać dane pliku i sprawdzać stan przesyłania. Identyfikator URI sesji z możliwością wznowienia wygasa po tygodniu.
Jeśli masz metadane pliku, dodaj je do treści żądania w formacie JSON. W przeciwnym razie pozostaw treść żądania pustą.
Dodaj te nagłówki HTTP:
X-Upload-Content-Type
. Opcjonalne. Ustaw na typ MIME danych pliku, które są przesyłane w kolejnych żądaniach. Jeśli typ MIME danych nie jest określony w metadanych lub w tym nagłówku, obiekt jest wyświetlany jakoapplication/octet-stream.
.X-Upload-Content-Length
. Opcjonalne. Ustaw na liczbę bajtów danych pliku, które są przesyłane w kolejnych żądaniach.Content-Type
. Wymagane, jeśli masz metadane pliku. Ustaw naapplication/json;
charset=UTF-8
.Content-Length
. Wymagane, chyba że używasz kodowania przesyłania fragmentami. Ustawiona na liczbę bajtów w treści tego początkowego żądania.
Wyślij prośbę. Jeśli żądanie rozpoczęcia sesji się powiedzie, odpowiedź będzie zawierać kod stanu
200 OK HTTP
. Dodatkowo odpowiedź zawiera nagłówekLocation
, który określa identyfikator URI sesji z możliwością wznowienia. Użyj identyfikatora URI sesji z możliwością wznowienia, aby przesłać dane pliku i sprawdzić stan przesyłania. Identyfikator URI sesji z możliwością wznowienia wygasa po tygodniu.Skopiuj i zapisz adres URL sesji z możliwością wznowienia.
Przejdź do sekcji Przesyłanie treści.
Prześlij treść
Plik można przesłać w sesji możliwej do wznowienia na 2 sposoby:
- Przesyłanie treści w ramach jednego żądania: użyj tego podejścia, jeśli plik można przesłać w ramach jednego żądania, nie ma stałego limitu czasu dla żadnego żądania lub nie musisz wyświetlać wskaźnika postępu przesyłania. To podejście jest najlepsze, ponieważ wymaga mniejszej liczby żądań i zapewnia lepszą wydajność.
Przesyłanie treści w kilku częściach: użyj tej metody, jeśli musisz zmniejszyć ilość danych przesyłanych w ramach jednego żądania. Może być konieczne zmniejszenie ilości przesyłanych danych, gdy poszczególne żądania mają stały limit czasu, jak to może mieć miejsce w przypadku niektórych klas żądań App Engine. To podejście jest też przydatne, jeśli musisz podać niestandardowy wskaźnik, który będzie pokazywać postęp przesyłania.
HTTP – pojedyncze żądanie
- Wyślij żądanie
PUT
do identyfikatora URI sesji z możliwością wznowienia. - Dodaj dane pliku do treści żądania.
- Dodaj nagłówek HTTP Content-Length ustawiony na liczbę bajtów w pliku.
- Wyślij prośbę. Jeśli żądanie przesłania zostanie przerwane lub otrzymasz odpowiedź
5xx
, postępuj zgodnie z procedurą opisaną w sekcji Wznawianie przerwanego przesyłania.
HTTP – wiele żądań
Wyślij żądanie
PUT
do identyfikatora URI sesji z możliwością wznowienia.Dodaj dane fragmentu do treści żądania. Twórz części o rozmiarze będącym wielokrotnością 256 KB (256 x 1024 bajtów), z wyjątkiem ostatniej części, która kończy przesyłanie. Utrzymuj jak największy rozmiar fragmentu, aby przesyłanie było wydajne.
Dodaj te nagłówki HTTP:
Content-Length
. Ustaw na liczbę bajtów w bieżącym bloku.Content-Range
. Ustaw, które bajty w przesyłanym pliku mają być widoczne. Na przykładContent-Range: bytes 0-524287/2000000
oznacza, że przesyłasz pierwsze 524 288 bajtów (256 x 1024 x 2) w pliku o rozmiarze 2 000 000 bajtów.
Wyślij żądanie i przetwórz odpowiedź. Jeśli żądanie przesłania zostanie przerwane lub otrzymasz odpowiedź
5xx
, postępuj zgodnie z procedurą opisaną w sekcji Wznawianie przerwanego przesyłania.Powtórz kroki od 1 do 4 dla każdego fragmentu, który pozostał w pliku. Użyj nagłówka
Range
w odpowiedzi, aby określić, od którego miejsca zacząć następny fragment. Nie zakładaj, że serwer otrzymał wszystkie bajty wysłane w poprzednim żądaniu.
Po zakończeniu przesyłania całego pliku otrzymasz odpowiedź 200 OK
lub 201 Created
wraz z metadanymi powiązanymi z zasobem.
Wznawianie przerwanego przesyłania
Jeśli żądanie przesłania zostanie zakończone przed otrzymaniem odpowiedzi lub jeśli otrzymasz odpowiedź 503
Service Unavailable
, musisz wznowić przerwane przesyłanie.
HTTP
Aby poprosić o stan przesyłania, wyślij puste żądanie
PUT
do identyfikatora URI sesji z możliwością wznowienia.Dodaj nagłówek
Content-Range
, aby wskazać, że bieżąca pozycja w pliku jest nieznana. Jeśli np. łączna długość pliku wynosi 2 000 000 bajtów, ustaw wartośćContent-Range
na*/2000000
. Jeśli nie znasz pełnego rozmiaru pliku, ustawContent-Range
na*/*
.Wyślij prośbę.
Przetwórz odpowiedź:
- Odpowiedź
200 OK
lub201 Created
oznacza, że przesyłanie zostało zakończone i nie trzeba podejmować żadnych dodatkowych działań. - Odpowiedź
308 Resume Incomplete
oznacza, że musisz kontynuować przesyłanie pliku. - Odpowiedź
404 Not Found
oznacza, że sesja przesyłania wygasła i trzeba ją rozpocząć od nowa.
- Odpowiedź
Jeśli otrzymasz odpowiedź
308 Resume Incomplete
, przetwórz nagłówekRange
odpowiedzi, aby określić, które bajty zostały odebrane przez serwer. Jeśli w odpowiedzi nie ma nagłówkaRange
, nie otrzymano żadnych bajtów. Na przykład nagłówekRange
bytes=0-42
oznacza, że pierwsze 43 bajty pliku zostały odebrane, a następny fragment do przesłania zacznie się od bajtu 44.Gdy wiesz już, od którego miejsca wznowić przesyłanie, kontynuuj przesyłanie pliku od następnego bajtu. Dodaj nagłówek
Content-Range
, aby wskazać, którą część pliku wysyłasz. Na przykładContent-Range: bytes 43-1999999
oznacza, że wysyłasz bajty od 44 do 2 000 000.
Obsługa błędów przesyłania multimediów
Podczas przesyłania multimediów postępuj zgodnie z tymi sprawdzonymi metodami, aby uniknąć błędów:
- W przypadku błędów
5xx
wznów lub ponów przesyłanie, które nie powiodło się z powodu przerw w połączeniu. Więcej informacji o obsłudze błędów5xx
znajdziesz w artykule Błędy 500, 502, 503 i 504. - W przypadku błędów
403 rate limit
spróbuj ponownie przesłać plik. Więcej informacji o obsłudze błędów403 rate limit
znajdziesz w artykule Błąd 403:rateLimitExceeded
. - W przypadku błędów
4xx
(w tym403
) podczas przesyłania z możliwością wznowienia uruchom przesyłanie ponownie. Te błędy wskazują, że sesja przesyłania wygasła i należy ją ponownie uruchomić, wysyłając prośbę o nowy identyfikator URI sesji. Sesje przesyłania wygasają po tygodniu nieaktywności.
Typy importowania do Dokumentów Google
Gdy utworzysz plik na Dysku, możesz przekonwertować go na typ pliku Google Workspace, np. Dokumenty lub Arkusze Google. Możesz na przykład przekonwertować dokument z ulubionego edytora tekstu na Dokument Google, aby skorzystać z jego funkcji.
Aby przekonwertować plik na określony typ pliku Google Workspace, podczas tworzenia pliku określ mimeType
Google Workspace.
Poniżej znajdziesz instrukcje konwertowania pliku CSV na arkusz Google Workspace:
Java
Python
Node.js
PHP
.NET
Aby sprawdzić, czy konwersja jest dostępna, przed utworzeniem pliku sprawdź tablicę importFormats
zasobu about
.
Obsługiwane konwersje są dostępne dynamicznie w tej tablicy. Oto kilka popularnych formatów importu:
Od | Do |
---|---|
Microsoft Word, OpenDocument Text, HTML, RTF, zwykły tekst | Dokumenty Google |
Microsoft Excel, arkusz kalkulacyjny OpenDocument, CSV, TSV, zwykły tekst | Arkusze Google |
Microsoft PowerPoint, Prezentacja OpenDocument | Prezentacje Google |
JPEG, PNG, GIF, BMP, PDF | Dokumenty Google (obraz jest umieszczany w dokumencie) |
Zwykły tekst (specjalny typ MIME), JSON | Google Apps Script |
Gdy przesyłasz i konwertujesz multimedia podczas update
żądania pliku Dokumentów, Arkuszy lub Prezentacji, cała zawartość dokumentu zostaje zastąpiona.
Gdy konwertujesz obraz na Dokument, Dysk używa optycznego rozpoznawania znaków (OCR), aby przekształcić obraz w tekst. Jakość algorytmu OCR możesz poprawić, podając odpowiedni kod języka BCP 47 w parametrze ocrLanguage
. Wyodrębniony tekst pojawi się w dokumencie obok osadzonego obrazu.
Przesyłanie plików za pomocą wygenerowanego wcześniej identyfikatora
Interfejs Drive API umożliwia pobieranie listy wstępnie wygenerowanych identyfikatorów plików, które są używane do przesyłania i tworzenia zasobów. Żądania przesyłania i tworzenia plików mogą korzystać z tych wstępnie wygenerowanych identyfikatorów. Ustaw pole id
w metadanych pliku.
Aby utworzyć wstępnie wygenerowane identyfikatory, wywołaj funkcję
files.generateIds
z liczbą identyfikatorów do utworzenia.
Możesz bezpiecznie ponawiać przesyłanie z wcześniej wygenerowanymi identyfikatorami, jeśli wystąpi nieokreślony błąd serwera lub przekroczenie limitu czasu. Jeśli plik został utworzony, kolejne próby zwracają błąd HTTP 409
i nie powodują utworzenia duplikatów.
Określanie tekstu indeksowalnego w przypadku nieznanych typów plików
Użytkownicy mogą wyszukiwać zawartość dokumentu za pomocą interfejsu Dysku. Możesz też użyć files.list
i pola fullText
, aby wyszukać treści z aplikacji. Więcej informacji znajdziesz w artykule Wyszukiwanie plików i folderów.
Dysk automatycznie indeksuje dokumenty na potrzeby wyszukiwania, gdy rozpoznaje typ pliku, w tym dokumenty tekstowe, pliki PDF, obrazy z tekstem i inne popularne typy. Jeśli aplikacja zapisuje inne typy plików (np. rysunki, filmy i skróty), możesz zwiększyć ich wykrywalność, podając tekst indeksowany w polu contentHints.indexableText
pliku.
Więcej informacji o tekście, który można indeksować, znajdziesz w artykule Zarządzanie metadanymi plików.