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 do 5 MB) bez podawania metadanych. Aby przeprowadzić proste przesyłanie, zapoznaj się z artykułem Przeprowadzanie 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 przeprowadzić 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 interfejsów API Google implementują co najmniej jeden z tych typów przesyłania. Więcej informacji o sposobie korzystania z poszczególnych typów znajdziesz w dokumentacji biblioteki klienta.
Użyj PATCH lub PUT
Przypominamy, ż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
PUTwe 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 create w zasobie files z parametrem uploadType=media.
Poniżej pokazujemy, jak wykonać proste przesyłanie:
HTTP
Wyślij żądanie
POSTdo identyfikatora URI /upload metody z parametrem zapytaniauploadType=media:POST https://www.googleapis.com/upload/drive/v3/files?uploadType=mediaDodaj 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 OKwraz 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 create w zasobie files z parametrem uploadType=multipart.
Poniżej pokazujemy, jak wykonać przesyłanie wieloczęściowe:
Java
Python
Node.js
PHP
.NET
HTTP
Wyślij żądanie
POSTdo identyfikatora URI /upload metody z parametrem zapytaniauploadType=multipart:POST https://www.googleapis.com/upload/drive/v3/files?uploadType=multipartUtwó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-TypeDodaj metadane pliku w formacie JSON. - Multimedia. Media muszą być na drugim miejscu i muszą mieć nagłówek
Content-Typedowolnego 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/relatedi 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_bazContent-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 metody get zwracają właściwość fileExtension
tylko do odczytu zawierającą 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. Dzięki temu, że nie musisz ponownie przesyłać dużych plików od początku, 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że się też przydać 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 create w zasobie files z parametrem uploadType=resumable.
HTTP
Wyślij żądanie
POSTdo identyfikatora URI /upload metody z parametrem zapytaniauploadType=resumable:POST https://www.googleapis.com/upload/drive/v3/files?uploadType=resumableJeś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: 0Zapisz 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. Opcjonalnie. 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. Opcjonalnie. 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. Wymagany, 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 wykonać zapytanie o 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 postępu przesyłania.
HTTP – pojedyncze żądanie
- Wyślij żądanie
PUTdo 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
PUTdo 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 przesłanym pliku mają być wyświetlane. Na przykładContent-Range: bytes 0-524287/2000000pokazuje, ż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
Rangew 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, utwórz puste żądanie
PUTdo 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-Rangena*/2000000. Jeśli nie znasz pełnego rozmiaru pliku, ustawContent-Rangena*/*.Wyślij prośbę.
Przetwórz odpowiedź:
- Odpowiedź
200 OKlub201 Createdoznacza, że przesyłanie zostało zakończone i nie trzeba podejmować żadnych dodatkowych działań. - Odpowiedź
308 Resume Incompleteoznacza, że musisz kontynuować przesyłanie pliku. - Odpowiedź
404 Not Foundoznacza, że sesja przesyłania wygasła i trzeba ją rozpocząć od nowa.
- Odpowiedź
Jeśli otrzymasz odpowiedź
308 Resume Incomplete, przetwórz nagłówekRangeodpowiedzi, 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łówekRangebytes=0-42oznacza, że pierwsze 43 bajty pliku zostały odebrane, a następny fragment do przesłania zacznie się od bajtu 44.Teraz, gdy wiesz, 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-1999999oznacza, ż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
5xxwznó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ów5xxznajdziesz w artykule Błędy 500, 502, 503, 504. - W przypadku błędów
403 rate limitspróbuj ponownie przesłać plik. Więcej informacji o obsłudze błędów403 rate limitznajdziesz 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 musi zostać ponownie uruchomiona przez wysłanie prośby o nowy identyfikator URI sesji. Sesje przesyłania wygasają po tygodniu nieaktywności.
Typy importowanych plików w Dokumentach 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 korzystać 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ź pole importFormats zasobu about. Obsługiwane konwersje są dostępne dynamicznie w tej tablicy. Oto niektóre z najpopularniejszych 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 do pliku Dokumentów, Arkuszy lub Prezentacji, cała zawartość dokumentu zostaje zastąpiona.
Podczas konwertowania obrazu na dokument Google 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órych można używać do tworzenia, kopiowania i przesyłania zasobów. Więcej informacji znajdziesz w artykule Generowanie identyfikatorów do użycia w plikach.
Jeśli wystąpi nieokreślony błąd serwera lub przekroczenie limitu czasu, możesz bezpiecznie ponowić przesyłanie z wcześniej wygenerowanymi identyfikatorami. Jeśli działanie na pliku zakończy się powodzeniem, kolejne próby zwrócą kod stanu HTTP 409 Conflict, a zduplikowane pliki nie zostaną utworzone.
Pamiętaj, że wstępnie wygenerowane identyfikatory nie są obsługiwane w przypadku tworzenia plików Google Workspace, z wyjątkiem application/vnd.google-apps.drive-sdki application/vnd.google-apps.folder typów MIME. Podobnie nie są obsługiwane przesyłane pliki, które odwołują się do konwersji na format pliku Google Workspace.
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ć metody list w zasobie files i pola fullText, aby wyszukiwać 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 indeksowanym tekście znajdziesz w artykule Zarządzanie metadanymi plików.