Google ไดรฟ์ API ช่วยให้คุณอัปโหลดข้อมูลไฟล์เมื่อสร้างหรืออัปเดต
Fileได้ ดูข้อมูลเกี่ยวกับวิธีสร้างไฟล์ที่มีเฉพาะข้อมูลเมตา เช่น โฟลเดอร์ ได้ที่สร้างไฟล์ที่มีเฉพาะข้อมูลเมตา
คุณอัปโหลดได้ 3 ประเภท ดังนี้
การอัปโหลดอย่างง่าย (
uploadType=media): ใช้การอัปโหลดประเภทนี้เพื่อโอนไฟล์สื่อขนาดเล็ก (5 MB หรือน้อยกว่า) โดยไม่ต้องระบุข้อมูลเมตา หากต้องการดำเนินการอัปโหลดอย่างง่าย โปรดดูดำเนินการอัปโหลดอย่างง่ายการอัปโหลดหลายส่วน (
uploadType=multipart): "ใช้การอัปโหลดประเภทนี้เพื่อ โอนไฟล์ขนาดเล็ก (5 MB หรือน้อยกว่า) พร้อมกับข้อมูลเมตาที่อธิบาย ไฟล์ในคำขอเดียว หากต้องการอัปโหลดแบบหลายส่วน โปรดดูอัปโหลด แบบหลายส่วนการอัปโหลดที่ดำเนินการต่อได้ (
uploadType=resumable): ใช้การอัปโหลดประเภทนี้สำหรับไฟล์ขนาดใหญ่ (มากกว่า 5 MB) และเมื่อมีโอกาสสูงที่เครือข่ายจะถูกขัดจังหวะ เช่น เมื่อสร้างไฟล์จากแอปบนอุปกรณ์เคลื่อนที่ การอัปโหลดที่ดำเนินการต่อได้ยังเป็นตัวเลือกที่ดีสำหรับแอปพลิเคชันส่วนใหญ่ เนื่องจากใช้ได้กับไฟล์ขนาดเล็กด้วย โดยมีค่าใช้จ่ายเพิ่มเติมเพียงคำขอ HTTP อีก 1 รายการต่อการอัปโหลด หากต้องการทำการอัปโหลดที่ดำเนินการต่อได้ โปรดดูทำการอัปโหลดที่ดำเนินการต่อได้
ไลบรารีของไคลเอ็นต์ Google API จะใช้การอัปโหลดประเภทใดประเภทหนึ่งต่อไปนี้อย่างน้อย 1 ประเภท ดูรายละเอียดเพิ่มเติมเกี่ยวกับวิธีใช้แต่ละประเภทได้ในเอกสารประกอบของไลบรารีของไคลเอ็นต์
ใช้ PATCH เทียบกับ PUT
เพื่อเป็นการทบทวน กริยา HTTP PATCH รองรับการอัปเดตทรัพยากรไฟล์บางส่วน
ในขณะที่กริยา HTTP PUT รองรับการแทนที่ทรัพยากรทั้งหมด โปรดทราบว่า PUT
อาจทำให้เกิดการเปลี่ยนแปลงที่ไม่รองรับการทำงานย้อนหลังเมื่อเพิ่มฟิลด์ใหม่ลงในทรัพยากรที่มีอยู่
เมื่ออัปโหลดทรัพยากรไฟล์ ให้ใช้หลักเกณฑ์ต่อไปนี้
- ใช้คำกริยา HTTP ที่ระบุไว้ในเอกสารอ้างอิง API สำหรับคำขอเริ่มต้นของการอัปโหลดที่ดำเนินการต่อได้ หรือสำหรับคำขอเดียวของการอัปโหลดแบบง่ายหรือแบบหลายส่วน
- ใช้
PUTสำหรับคำขอการอัปโหลดที่ดำเนินการต่อได้ทั้งหมดหลังจากที่คำขอเริ่มแล้ว คำขอเหล่านี้จะอัปโหลดเนื้อหาไม่ว่าจะเรียกใช้เมธอดใดก็ตาม
อัปโหลดอย่างง่าย
หากต้องการอัปโหลดอย่างง่าย ให้ใช้เมธอด create
ในทรัพยากร files โดยมี
uploadType=media
ต่อไปนี้เป็นวิธีอัปโหลดแบบง่าย
HTTP
สร้างคำขอ
POSTไปยัง URI ของเมธอด/uploadพร้อมพารามิเตอร์การค้นหาของuploadType=mediaดังนี้POST https://www.googleapis.com/upload/drive/v3/files?uploadType=mediaเพิ่มข้อมูลของไฟล์ลงในเนื้อหาของคำขอ
เพิ่มส่วนหัว HTTP ต่อไปนี้
Content-Typeตั้งค่าเป็นประเภทสื่อ MIME ของออบเจ็กต์ที่ กำลังอัปโหลดContent-Lengthตั้งค่าเป็นจำนวนไบต์ที่คุณอัปโหลด หากคุณใช้ การเข้ารหัสการโอนแบบเป็นกลุ่ม คุณไม่จำเป็นต้องใช้ส่วนหัวนี้
ส่งคำขอ หากคำขอสำเร็จ เซิร์ฟเวอร์จะแสดงรหัสสถานะ
HTTP 200 OKพร้อมกับข้อมูลเมตาของไฟล์ {HTTP}
JavaScript
/**
* Uploads a file without metadata.
*
* @param {Blob|File} file The file to upload.
* @param {string} accessToken A valid OAuth 2.0 access token.
* @return {Promise<Object>} The uploaded file metadata.
*/
async function uploadFileSimple(file, accessToken) {
const response = await fetch(
'https://www.googleapis.com/upload/drive/v3/files?uploadType=media',
{
method: 'POST',
headers: {
'Authorization': `Bearer ${accessToken}`,
'Content-Type': file.type,
},
body: file,
}
);
if (!response.ok) {
throw new Error(`Upload failed: ${response.statusText}`);
}
return response.json();
}
เมื่ออัปโหลดอย่างง่าย ระบบจะสร้างข้อมูลเมตาพื้นฐานและอนุมานแอตทริบิวต์บางอย่าง
จากไฟล์ เช่น ประเภท MIME หรือ modifiedTime คุณสามารถใช้
การอัปโหลดอย่างง่ายในกรณีที่มีไฟล์ขนาดเล็กและข้อมูลเมตาของไฟล์ไม่
สำคัญ
ทำการอัปโหลดหลายส่วน
คำขออัปโหลดแบบหลายส่วนช่วยให้คุณอัปโหลดข้อมูลเมตาและข้อมูลในคำขอเดียวกันได้ ใช้ตัวเลือกนี้หากข้อมูลที่คุณส่งมีขนาดเล็กพอที่จะอัปโหลดอีกครั้งได้ ทั้งหมด หากการเชื่อมต่อล้มเหลว
หากต้องการอัปโหลดแบบหลายส่วน ให้ใช้เมธอด
create ในทรัพยากร files ที่มี uploadType=multipart
ต่อไปนี้เป็นวิธีอัปโหลดแบบหลายส่วน
Java
Python
Node.js
JavaScript
/**
* Uploads a file along with its metadata.
*
* @param {Blob|File} file The file to upload.
* @param {string} accessToken A valid OAuth 2.0 access token.
* @return {Promise<Object>} The uploaded file metadata.
*/
async function uploadFileMultipart(file, accessToken) {
const metadata = {
name: file.name,
};
const boundary = 'foo_bar_baz';
const delimiter = `\r\n--${boundary}\r\n`;
const closeDelimiter = `\r\n--${boundary}--`;
const requestBody = new Blob([
`--${boundary}\r\n`,
'Content-Type: application/json; charset=UTF-8\r\n\r\n',
JSON.stringify(metadata),
delimiter,
`Content-Type: ${file.type}\r\n\r\n`,
file,
closeDelimiter,
]);
const response = await fetch(
'https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart',
{
method: 'POST',
headers: {
'Authorization': `Bearer ${accessToken}`,
'Content-Type': `multipart/related; boundary=${boundary}`,
},
body: requestBody,
}
);
if (!response.ok) {
throw new Error(`Upload failed: ${response.statusText}`);
}
return response.json();
}
PHP
.NET
HTTP
สร้างคำขอ
POSTไปยัง URI ของเมธอด/uploadพร้อมพารามิเตอร์การค้นหาของuploadType=multipartดังนี้POST https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart
สร้างเนื้อหาของคำขอ จัดรูปแบบเนื้อหาตามประเภทเนื้อหา MIME multipart/related ที่ระบุไว้ใน RFC 2387 ซึ่งมี 2 ส่วนดังนี้
- ข้อมูลเมตา ข้อมูลเมตาต้องมาก่อนและต้องมี
Content-Typeส่วนหัวที่ตั้งค่าเป็นapplication/json;charset=UTF-8เพิ่มข้อมูลเมตาของไฟล์ ในรูปแบบ JSON - สื่อ สื่อต้องอยู่เป็นอันดับที่ 2 และต้องมี
Content-Typeส่วนหัว ของประเภท MIME ใดก็ได้ เพิ่มข้อมูลของไฟล์ลงในส่วนสื่อ ระบุแต่ละส่วนด้วยสตริงขอบเขตโดยมีเครื่องหมายขีดกลาง 2 ขีดนำหน้า นอกจากนี้ ให้เพิ่มขีดกลาง 2 ขีดหลังสตริงขอบเขตสุดท้าย
เพิ่มส่วนหัว HTTP ระดับบนสุดต่อไปนี้
Content-Typeตั้งค่าเป็นmultipart/relatedและรวมสตริงขอบเขต ที่คุณใช้เพื่อระบุส่วนต่างๆ ของคำขอ เช่นContent-Type: multipart/related; boundary=foo_bar_bazContent-Lengthตั้งค่าเป็นจำนวนไบต์ทั้งหมดในเนื้อหาคำขอ
ส่งคำขอ
หากต้องการสร้างหรืออัปเดตเฉพาะส่วนข้อมูลเมตาโดยไม่มีข้อมูลที่เชื่อมโยง ให้ส่งคำขอ
POSTหรือPATCHไปยังปลายทางของทรัพยากรมาตรฐานhttps://www.googleapis.com/drive/v3/filesหากคำขอสำเร็จ เซิร์ฟเวอร์จะแสดงรหัสสถานะHTTP 200 OKพร้อมกับข้อมูลเมตาของไฟล์- ข้อมูลเมตา ข้อมูลเมตาต้องมาก่อนและต้องมี
เมื่อสร้างไฟล์ ผู้ใช้ควรระบุนามสกุลไฟล์ในname
ฟิลด์ของไฟล์ ตัวอย่างเช่น เมื่อสร้างไฟล์ JPEG ของรูปภาพ คุณอาจระบุข้อความ เช่น "name": "photo.jpg" ในข้อมูลเมตา การเรียกใช้เมธอด get ครั้งต่อๆ ไปจะแสดงผลพร็อพเพอร์ตี้ fileExtension
แบบอ่านอย่างเดียวซึ่งมีส่วนขยายที่ระบุไว้เดิมในฟิลด์ name
ทำการอัปโหลดที่ดำเนินการต่อได้
การอัปโหลดที่ดำเนินการต่อได้ช่วยให้คุณดำเนินการอัปโหลดต่อได้หลังจากที่การสื่อสารล้มเหลวขัดจังหวะการไหลของข้อมูล การอัปโหลดต่อได้ยังช่วยลดการใช้แบนด์วิดท์ได้ด้วยในกรณีที่เครือข่ายล้มเหลว เนื่องจากคุณไม่ต้องเริ่มการอัปโหลดไฟล์ขนาดใหญ่ใหม่ตั้งแต่ต้น
การอัปโหลดต่อได้จะมีประโยชน์เมื่อขนาดไฟล์อาจแตกต่างกันมากหรือเมื่อมี การจำกัดเวลาที่แน่นอนสำหรับคำขอ (เช่น งานในเบื้องหลังของระบบปฏิบัติการมือถือและ คำขอ App Engine บางรายการ) นอกจากนี้ คุณยังอาจใช้การอัปโหลดต่อได้ใน สถานการณ์ที่คุณต้องการแสดงแถบความคืบหน้าของการอัปโหลด
การอัปโหลดที่ดำเนินการต่อได้ประกอบด้วยขั้นตอนระดับสูงหลายขั้นตอน ดังนี้
- ส่งคำขอเริ่มต้นและดึงข้อมูล URI ของเซสชันที่อัปโหลดต่อได้
- อัปโหลดข้อมูลและตรวจสอบสถานะการอัปโหลด
- (ไม่บังคับ) หากการอัปโหลดถูกขัดจังหวะ ให้ดำเนินการอัปโหลดต่อ
ส่งคำขอเริ่มต้น
หากต้องการเริ่มการอัปโหลดที่ดำเนินการต่อได้ ให้ใช้วิธีการ create ในทรัพยากร files ที่มี uploadType=resumable
HTTP
สร้างคำขอ
POSTไปยัง URI ของเมธอด/uploadพร้อมพารามิเตอร์การค้นหาของuploadType=resumableดังนี้POST https://www.googleapis.com/upload/drive/v3/files?uploadType=resumableหากคำขอเริ่มต้นสำเร็จ การตอบกลับจะมีรหัสสถานะ HTTP
200 OKนอกจากนี้ ยังมีส่วนหัวLocationที่ ระบุ URI ของเซสชันที่สามารถดำเนินการต่อได้ด้วยHTTP/1.1 200 OK Location: https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable&upload_id=xa298sd_sdlkj2 Content-Length: 0บันทึก URI ของเซสชันที่อัปโหลดต่อได้เพื่อให้คุณอัปโหลดข้อมูลไฟล์และค้นหาสถานะการอัปโหลดได้ URI ของเซสชันที่สามารถกลับมาทำงานต่อได้จะหมดอายุหลังจากผ่านไป 1 สัปดาห์
หากต้องการอัปเดตไฟล์ที่มีอยู่ ให้ใช้
PATCHหากมีข้อมูลเมตาสำหรับไฟล์ ให้เพิ่มข้อมูลเมตาลงในเนื้อหาคำขอในรูปแบบ JSON หรือเว้นเนื้อหาคำขอว่างไว้
เพิ่มส่วนหัว HTTP ต่อไปนี้
X-Upload-Content-Typeไม่บังคับ ตั้งค่าเป็นประเภท MIME ของไฟล์ data ซึ่งจะโอนในคำขอที่ตามมา หากไม่ได้ระบุประเภท MIME ของข้อมูลในข้อมูลเมตาหรือผ่านส่วนหัวนี้ ระบบจะแสดงออบเจ็กต์เป็นapplication/octet-stream.X-Upload-Content-Lengthไม่บังคับ ตั้งค่าเป็นจำนวนไบต์ของ ข้อมูลไฟล์ ซึ่งจะโอนในคำขอที่ตามมาContent-Typeต้องระบุหากคุณมีข้อมูลเมตาสำหรับไฟล์ ตั้งค่าเป็นapplication/json;charset=UTF-8Content-Lengthต้องระบุเว้นแต่คุณจะใช้การเข้ารหัสการโอนแบบเป็นกลุ่ม ตั้งค่าเป็นจำนวนไบต์ในเนื้อหาของคำขอเริ่มต้นนี้
ส่งคำขอ หากคำขอเริ่มต้นเซสชันสำเร็จ การตอบกลับจะมีรหัสสถานะ
200 OK HTTPที่ไม่มีเนื้อหา นอกจากนี้ การตอบกลับยังมีส่วนหัวLocationที่ระบุ URI ของเซสชันที่สามารถดำเนินการต่อได้ ใช้ URI เซสชันที่อัปโหลดต่อได้เพื่ออัปโหลดข้อมูลไฟล์และค้นหาสถานะการอัปโหลด URI ของเซสชันที่สามารถดำเนินการต่อได้จะหมดอายุหลังจากผ่านไป 1 สัปดาห์คัดลอกและบันทึก URL ของเซสชันที่สามารถดำเนินการต่อได้
JavaScript
/**
* Initiates a resumable upload session and returns the session URI.
*
* @param {Blob|File} file The file to upload.
* @param {string} accessToken A valid OAuth 2.0 access token.
* @return {Promise<string>} The resumable session URI.
*/
async function initiateResumableUpload(file, accessToken) {
const metadata = {
name: file.name,
mimeType: file.type,
};
const response = await fetch(
'https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable',
{
method: 'POST',
headers: {
'Authorization': `Bearer ${accessToken}`,
'Content-Type': 'application/json; charset=UTF-8',
'X-Upload-Content-Type': file.type,
'X-Upload-Content-Length': file.size,
},
body: JSON.stringify(metadata),
}
);
if (!response.ok) {
throw new Error(`Failed to initiate upload: ${response.statusText}`);
}
return response.headers.get('Location');
}
อัปโหลดเนื้อหา
การอัปโหลดไฟล์ด้วยเซสชันที่สามารถอัปโหลดต่อได้มี 2 วิธีดังนี้
- อัปโหลดเนื้อหาในคำขอเดียว: ใช้วิธีนี้เมื่ออัปโหลดไฟล์ในคำขอเดียวได้ ในกรณีที่ไม่มีการจำกัดเวลาที่แน่นอนสำหรับคำขอเดียว หรือคุณไม่จำเป็นต้องแสดงตัวบ่งชี้ความคืบหน้าในการอัปโหลด วิธีนี้ดีที่สุดเนื่องจากต้องใช้คำขอน้อยกว่าและส่งผลให้ประสิทธิภาพดีขึ้น
อัปโหลดเนื้อหาเป็นหลายๆ ส่วน: ใช้วิธีนี้หากคุณต้อง ลดปริมาณข้อมูลที่โอนในคำขอเดียว คุณอาจต้องลดข้อมูลที่โอนเมื่อมีขีดจำกัดเวลาที่แน่นอนสำหรับคำขอแต่ละรายการ ซึ่งอาจเกิดขึ้นได้กับคำขอ App Engine บางประเภท แนวทางนี้ยังมีประโยชน์ในกรณีที่คุณต้องระบุตัวบ่งชี้ที่กำหนดเองเพื่อแสดงความคืบหน้าในการอัปโหลด
HTTP - คำขอเดียว
- สร้าง
PUTคำขอไปยัง URI ของเซสชันที่สามารถดำเนินการต่อได้ - เพิ่มข้อมูลของไฟล์ลงในเนื้อหาของคำขอ
- เพิ่มส่วนหัว HTTP Content-Length โดยตั้งค่าเป็นจำนวนไบต์ในไฟล์
- ส่งคำขอ หากคำขออัปโหลดถูกขัดจังหวะหรือคุณได้รับคำตอบ
5xxให้ทำตามขั้นตอนในอัปโหลดต่อจากการอัปโหลดที่ถูกขัดจังหวะ
JavaScript - คำขอเดียว
/**
* Uploads the entire file in a single request using the session URI.
*
* @param {string} sessionUrl The resumable session URI.
* @param {Blob|File} file The file to upload.
* @return {Promise<Object>} The uploaded file metadata.
*/
async function uploadFileSingleRequest(sessionUrl, file) {
const response = await fetch(sessionUrl, {
method: 'PUT',
headers: {
'Content-Length': file.size,
},
body: file,
});
if (!response.ok) {
throw new Error(`Upload failed: ${response.status} ${response.statusText}`);
}
return response.json();
}
HTTP - คำขอหลายรายการ
สร้าง
PUTคำขอไปยัง URI ของเซสชันที่สามารถดำเนินการต่อได้เพิ่มข้อมูลของก้อนข้อมูลลงในเนื้อหาของคำขอ สร้างก้อนข้อมูลที่มีขนาดเป็นทวีคูณของ 256 KB (256 x 1024 ไบต์) ยกเว้นก้อนข้อมูลสุดท้ายที่ทำให้การอัปโหลด เสร็จสมบูรณ์ กำหนดขนาดก้อนข้อมูลให้ใหญ่ที่สุดเท่าที่จะเป็นไปได้เพื่อให้การอัปโหลดมีประสิทธิภาพ
เพิ่มส่วนหัว HTTP ต่อไปนี้
Content-Lengthตั้งค่าเป็นจำนวนไบต์ในก้อนข้อมูลปัจจุบันContent-Rangeตั้งค่าให้แสดงไบต์ในไฟล์ที่คุณอัปโหลด ตัวอย่างเช่นContent-Range: bytes 0-524287/2000000แสดงว่าคุณอัปโหลด 524,288 ไบต์แรก (256 x 1024 x 2) ในไฟล์ขนาด 2,000,000 ไบต์
ส่งคำขอและประมวลผลการตอบกลับ หากคำขออัปโหลดถูกขัดจังหวะหรือคุณได้รับคำตอบ
5xxให้ทำตามขั้นตอนในอัปโหลดต่อจากที่ค้างไว้ทำขั้นตอนที่ 1 ถึง 4 ซ้ำสำหรับแต่ละก้อนที่เหลืออยู่ในไฟล์ ใช้ส่วนหัว
Rangeในการตอบกลับเพื่อกำหนดตำแหน่งที่จะเริ่มก้อนข้อมูลถัดไป อย่าคิดว่าเซิร์ฟเวอร์ได้รับไบต์ทั้งหมดที่ส่งในคำขอก่อนหน้า
เมื่ออัปโหลดไฟล์ทั้งหมดเสร็จสมบูรณ์ คุณจะได้รับการตอบกลับเป็น 200 OK หรือ
201 Created พร้อมกับข้อมูลเมตาที่เชื่อมโยงกับทรัพยากร
JavaScript - คำขอหลายรายการ
/**
* Uploads a file in chunks of a specified size.
*
* @param {string} sessionUrl The resumable session URI.
* @param {Blob|File} file The file to upload.
* @param {number} chunkSize Chunk size in bytes (must be a multiple of 256 KB).
* @return {Promise<Object>} The uploaded file metadata.
*/
async function uploadFileChunked(sessionUrl, file, chunkSize = 1024 * 1024) {
let start = 0;
while (start < file.size) {
const end = Math.min(start + chunkSize, file.size);
const chunk = file.slice(start, end);
const chunkLength = end - start;
const response = await fetch(sessionUrl, {
method: 'PUT',
headers: {
'Content-Length': chunkLength,
'Content-Range': `bytes ${start}-${end - 1}/${file.size}`,
},
body: chunk,
});
if (response.status === 308) {
// 308 Resume Incomplete indicates chunk was received successfully.
start = end;
} else if (response.ok) {
// 200 OK or 201 Created indicates the upload is fully complete.
return response.json();
} else {
throw new Error(`Upload failed: ${response.status} ${response.statusText}`);
}
}
}
อัปโหลดต่อ
หากคำขออัปโหลดสิ้นสุดก่อนที่จะมีการตอบกลับ หรือหากคุณได้รับการตอบกลับ 503
Service Unavailable คุณจะต้องอัปโหลดต่อจากที่หยุดชะงัก
HTTP
หากต้องการขอสถานะการอัปโหลด ให้สร้างคำขอ
PUTที่ว่างเปล่าไปยัง URI ของเซสชันที่อัปโหลดต่อได้เพิ่มส่วนหัว
Content-Rangeเพื่อระบุว่าไม่ทราบตำแหน่งปัจจุบันใน ไฟล์ เช่น ตั้งค่าContent-Rangeเป็น*/2000000หาก ความยาวไฟล์ทั้งหมดคือ 2,000,000 ไบต์ หากไม่ทราบขนาดเต็มของ ไฟล์ ให้ตั้งค่าContent-Rangeเป็น*/*ส่งคำขอ
ประมวลผลการตอบกลับ
- การตอบกลับ
200 OKหรือ201 Createdแสดงว่าการอัปโหลดเสร็จสมบูรณ์แล้ว และไม่จำเป็นต้องดำเนินการใดๆ เพิ่มเติม - การตอบกลับ
308 Resume Incompleteแสดงว่าคุณต้องอัปโหลดไฟล์ต่อไป 404 Not Foundการตอบกลับบ่งชี้ว่าเซสชันการอัปโหลดหมดอายุแล้วและ ต้องเริ่มการอัปโหลดใหม่ตั้งแต่ต้น
- การตอบกลับ
หากคุณได้รับการตอบกลับ
308 Resume Incompleteให้ประมวลผลส่วนหัวRangeของการตอบกลับเพื่อพิจารณาว่าเซิร์ฟเวอร์ได้รับไบต์ใด หากคำตอบไม่มีส่วนหัวRangeแสดงว่าไม่ได้รับไบต์ใดๆ เช่นRangeส่วนหัวของbytes=0-42แสดงว่าได้รับไบต์แรก 43 ไบต์ของไฟล์แล้ว และก้อนข้อมูลถัดไปที่จะอัปโหลด จะเริ่มต้นด้วยไบต์ที่ 44เมื่อทราบตำแหน่งที่จะอัปโหลดต่อแล้ว ให้อัปโหลดไฟล์ต่อ โดยเริ่มจากไบต์ถัดไป ใส่ส่วนหัว
Content-Rangeเพื่อระบุส่วนของไฟล์ที่คุณส่ง ตัวอย่างเช่นContent-Range: bytes 43-1999999แสดงว่าคุณ ส่งไบต์ 44 ถึง 2,000,000
JavaScript
/**
* Resumes an interrupted upload by querying the status and uploading remaining bytes.
*
* @param {string} sessionUrl The resumable session URI.
* @param {Blob|File} file The file being uploaded.
* @return {Promise<Object>} The uploaded file metadata.
*/
async function resumeUpload(sessionUrl, file) {
// 1. Query the upload status by sending an empty PUT request
const statusResponse = await fetch(sessionUrl, {
method: 'PUT',
headers: {
'Content-Range': `bytes */${file.size}`,
},
});
if (statusResponse.ok) {
// Already completed
return statusResponse.json();
}
if (statusResponse.status !== 308) {
throw new Error(`Failed to query upload status: ${statusResponse.statusText}`);
}
// 2. Parse the Range header to determine received bytes
const rangeHeader = statusResponse.headers.get('Range');
let startOffset = 0;
if (rangeHeader) {
const parts = rangeHeader.split('-');
startOffset = parseInt(parts[1], 10) + 1;
}
// 3. Upload the remaining content of the file
const remainingChunk = file.slice(startOffset);
const response = await fetch(sessionUrl, {
method: 'PUT',
headers: {
'Content-Length': remainingChunk.size,
'Content-Range': `bytes ${startOffset}-${file.size - 1}/${file.size}`,
},
body: remainingChunk,
});
if (!response.ok) {
throw new Error(`Resume upload failed: ${response.statusText}`);
}
return response.json();
}
จัดการข้อผิดพลาดในการอัปโหลดสื่อ
เมื่ออัปโหลดสื่อ ให้ทำตามแนวทางปฏิบัติแนะนำต่อไปนี้เพื่อจัดการข้อผิดพลาด
- สำหรับข้อผิดพลาด
5xxให้ดำเนินการอัปโหลดต่อหรือลองอัปโหลดอีกครั้งหากอัปโหลดไม่สำเร็จเนื่องจากการเชื่อมต่อถูกขัดจังหวะ ดูข้อมูลเพิ่มเติมเกี่ยวกับการจัดการ5xxข้อผิดพลาดได้ที่ ข้อผิดพลาด 500, 502, 503, 504 - สำหรับข้อผิดพลาด
403 rate limitให้ลองอัปโหลดอีกครั้ง ดูข้อมูลเพิ่มเติมเกี่ยวกับการจัดการข้อผิดพลาด403 rate limitได้ที่ข้อผิดพลาด 403:rateLimitExceeded - หากพบข้อผิดพลาด
4xx(รวมถึง403) ระหว่างการอัปโหลดที่ดำเนินการต่อได้ ให้เริ่มการอัปโหลดใหม่ ข้อผิดพลาดเหล่านี้บ่งชี้ว่าเซสชันการอัปโหลดหมดอายุแล้วและต้องเริ่มต้นใหม่โดยการขอ URI ของเซสชันใหม่ เซสชันการอัปโหลดจะหมดอายุหลังจากไม่มีการใช้งานเป็นเวลา 1 สัปดาห์เช่นกัน
นำเข้าประเภทไฟล์ไปยัง Google เอกสาร
เมื่อสร้างไฟล์ในไดรฟ์ คุณอาจต้องการแปลงไฟล์เป็นประเภทไฟล์ Google Workspace เช่น Google เอกสารหรือชีต เช่น คุณอาจต้องการแปลงเอกสารจากโปรแกรมประมวลผลคำโปรดเป็นเอกสารใน Google เอกสารเพื่อใช้ประโยชน์จากฟีเจอร์ต่างๆ
หากต้องการแปลงไฟล์เป็นประเภทไฟล์ Google Workspace ที่เฉพาะเจาะจง ให้ระบุ
Google Workspace mimeType เมื่อสร้างไฟล์
ต่อไปนี้เป็นวิธีแปลงไฟล์ CSV เป็นชีตใน Google Workspace
Java
Python
Node.js
PHP
.NET
หากต้องการดูว่ามี Conversion หรือไม่ ให้ตรวจสอบฟิลด์ importFormats ของทรัพยากร about ก่อนสร้างไฟล์ Conversion ที่รองรับจะพร้อมใช้งานแบบไดนามิกในอาร์เรย์นี้ รูปแบบการนำเข้าที่ใช้กันโดยทั่วไปมีดังนี้
| จาก | ถึง |
|---|---|
| Microsoft Word, OpenDocument Text, HTML, RTF, ข้อความธรรมดา, มาร์กดาวน์ | Google เอกสาร |
| Microsoft Excel, สเปรดชีต OpenDocument, CSV, TSV, ข้อความธรรมดา | Google ชีต |
| Microsoft PowerPoint, งานนำเสนอ OpenDocument | Google สไลด์ |
| JPEG, PNG, GIF, BMP, PDF | Google เอกสาร (ฝังรูปภาพในเอกสาร) |
| ข้อความธรรมดา (ประเภท MIME พิเศษ), JSON | Google Apps Script |
เมื่ออัปโหลดและแปลงสื่อระหว่างupdateคำขอไปยังไฟล์เอกสาร ชีต หรือสไลด์ ระบบจะแทนที่เนื้อหาทั้งหมดของเอกสาร
เมื่อคุณแปลงรูปภาพเป็นเอกสาร Google ไดรฟ์จะใช้
การรู้จำอักขระด้วยภาพ (OCR) เพื่อแปลงรูปภาพเป็นข้อความ คุณสามารถ
ปรับปรุงคุณภาพของอัลกอริทึม OCR ได้โดยการระบุรหัสภาษา BCP
47 ที่เกี่ยวข้องในพารามิเตอร์ ocrLanguage
ข้อความที่ดึงออกมาจะปรากฏในเอกสารข้างรูปภาพที่ฝัง
ใช้รหัสที่สร้างไว้ล่วงหน้าเพื่ออัปโหลดไฟล์
Drive API ช่วยให้คุณดึงรายการรหัสไฟล์ที่สร้างไว้ล่วงหน้าซึ่ง ใช้เพื่อสร้าง คัดลอก และอัปโหลดทรัพยากรได้ ดูข้อมูลเพิ่มเติมได้ที่ สร้างรหัสเพื่อใช้กับไฟล์
คุณลองอัปโหลดอีกครั้งได้อย่างปลอดภัยด้วยรหัสที่สร้างไว้ล่วงหน้าหากเกิดข้อผิดพลาดของเซิร์ฟเวอร์หรือหมดเวลาที่ไม่แน่นอน
หากการดำเนินการกับไฟล์สำเร็จ การลองอีกครั้งในภายหลัง
จะแสดงการตอบกลับรหัสสถานะ HTTP 409 Conflict และระบบจะไม่สร้างไฟล์ที่ซ้ำกัน
โปรดทราบว่าระบบไม่รองรับรหัสที่สร้างไว้ล่วงหน้าสำหรับการสร้างไฟล์ Google Workspace ยกเว้นapplication/vnd.google-apps.drive-sdk
และapplication/vnd.google-apps.folder ประเภท MIME ในทำนองเดียวกัน ระบบก็ไม่รองรับการอัปโหลดที่อ้างอิงการแปลงเป็นรูปแบบไฟล์ Google Workspace ด้วย
กำหนดข้อความที่จัดทำดัชนีได้สำหรับประเภทไฟล์ที่ไม่รู้จัก
ผู้ใช้สามารถใช้ UI ของไดรฟ์เพื่อค้นหาเนื้อหาเอกสารได้ นอกจากนี้ คุณยังใช้เมธอด list ในแหล่งข้อมูล files และฟิลด์ fullText เพื่อค้นหาเนื้อหาจากแอปได้ด้วย ดูข้อมูลเพิ่มเติมได้ที่ค้นหาไฟล์และโฟลเดอร์
ไดรฟ์จะจัดทำดัชนีเอกสารสำหรับการค้นหาโดยอัตโนมัติเมื่อ
รู้จักประเภทไฟล์ ซึ่งรวมถึงเอกสารข้อความ, PDF, รูปภาพที่มีข้อความ และ
ประเภทอื่นๆ ที่พบบ่อย หากแอปบันทึกไฟล์ประเภทอื่นๆ (เช่น ภาพวาด วิดีโอ และทางลัด) คุณจะปรับปรุงการค้นพบได้โดยระบุข้อความที่ทำดัชนีได้ในฟิลด์ contentHints.indexableText ของไฟล์
ดูข้อมูลเพิ่มเติมเกี่ยวกับข้อความที่จัดทำดัชนีได้ที่จัดการข้อมูลเมตาของไฟล์