เพิ่มปุ่ม "บันทึกไปที่ไดรฟ์"

ปุ่ม "บันทึกไปที่ไดรฟ์" ช่วยให้ผู้ใช้บันทึกไฟล์จากเว็บไซต์ของคุณไปยังไดรฟ์ได้ สมมติว่าเว็บไซต์ของคุณแสดงคู่มือการใช้งาน (PDF) หลายรายการที่ผู้ใช้ดาวน์โหลดได้ คุณสามารถวางปุ่ม "บันทึกไปที่ไดรฟ์" ไว้ข้างคู่มือแต่ละรายการเพื่อให้ผู้ใช้บันทึกคู่มือไปยังไดรฟ์ของฉันได้

เมื่อผู้ใช้คลิกปุ่ม ระบบจะดาวน์โหลดไฟล์จากแหล่งข้อมูลและอัปโหลดไปยัง Google ไดรฟ์เมื่อได้รับข้อมูล เนื่องจากระบบจะดาวน์โหลดในบริบทของเบราว์เซอร์ของผู้ใช้ กระบวนการนี้จึงช่วยให้ผู้ใช้ตรวจสอบสิทธิ์การดำเนินการเพื่อบันทึกไฟล์โดยใช้เซสชันเบราว์เซอร์ที่สร้างไว้ได้

เบราว์เซอร์ที่รองรับ

ปุ่ม "บันทึกไปที่ไดรฟ์" รองรับ เบราว์เซอร์ต่อไปนี้

เพิ่มปุ่ม "บันทึกไปที่ไดรฟ์" ลงในหน้าเว็บ

หากต้องการสร้างอินสแตนซ์ของปุ่ม "บันทึกไปที่ไดรฟ์" ให้เพิ่มสคริปต์ต่อไปนี้ลงในหน้าเว็บ

<script src="https://apis.google.com/js/platform.js" async defer></script>
<div class="g-savetodrive"
   data-src="//example.com/path/to/myfile.pdf"
   data-filename="My Statement.pdf"
   data-sitename="My Company Name">
</div>

โดยที่

  • class เป็นพารามิเตอร์ที่ต้องระบุและต้องตั้งค่าเป็น g-savetodrive หากคุณใช้แท็ก HTML มาตรฐาน

  • data-src เป็นพารามิเตอร์ที่ต้องระบุซึ่งมี URL ของไฟล์ที่จะบันทึก

    • URL อาจเป็นแบบสัมบูรณ์หรือแบบสัมพัทธ์
    • URL data-src สามารถแสดงจากโดเมน โดเมนย่อย และโปรโตคอลเดียวกันกับโดเมนที่โฮสต์ปุ่ม คุณต้องใช้โปรโตคอลที่ตรงกันระหว่างหน้าเว็บกับแหล่งข้อมูล
    • ไม่รองรับ URI ของข้อมูลและ URL file://
    • เนื่องจากนโยบายต้นทางเดียวกันของเบราว์เซอร์ URL นี้จึงต้องแสดงจากโดเมนเดียวกันกับหน้าเว็บที่วาง URL หรือเข้าถึงได้โดยใช้กลไกการแชร์ทรัพยากรข้ามโดเมน (CORS) หากปุ่มและทรัพยากรอยู่ ในโดเมนอื่น โปรดดู จัดการปุ่มและทรัพยากรในโดเมนอื่น(#domain)
    • หากต้องการแสดงไฟล์เมื่อทั้ง http และ https แสดงหน้าเดียวกัน ให้ระบุทรัพยากรโดยไม่มีโปรโตคอล เช่น data-src="//example.com/files/file.pdf" ซึ่งจะใช้โปรโตคอลที่เหมาะสม ตามวิธีที่เข้าถึงหน้าโฮสต์
  • data-filename เป็นพารามิเตอร์ที่ต้องระบุซึ่งมีชื่อที่ใช้สำหรับไฟล์ที่บันทึก

  • data-sitename เป็นพารามิเตอร์ที่ต้องระบุซึ่งมีชื่อเว็บไซต์ที่แสดงไฟล์

คุณสามารถวางแอตทริบิวต์เหล่านี้ในองค์ประกอบ HTML ใดก็ได้ อย่างไรก็ตาม องค์ประกอบที่ใช้บ่อยที่สุดคือ div, span หรือ button องค์ประกอบเหล่านี้แต่ละรายการจะแสดงแตกต่างกันเล็กน้อยขณะที่หน้าเว็บกำลังโหลด เนื่องจากเบราว์เซอร์จะแสดงผลองค์ประกอบก่อนที่ JavaScript "บันทึกไปที่ไดรฟ์" จะแสดงผลองค์ประกอบอีกครั้ง

ต้องโหลดสคริปต์นี้โดยใช้โปรโตคอล HTTPS และสามารถรวมจากจุดใดก็ได้ในหน้าเว็บโดยไม่มีข้อจำกัด นอกจากนี้ คุณยังโหลดสคริปต์แบบไม่พร้อมกันเพื่อปรับปรุงประสิทธิภาพได้ด้วย

ใช้ปุ่มหลายปุ่มในหน้าเดียว

คุณสามารถวางปุ่ม "บันทึกไปที่ไดรฟ์" หลายปุ่มในหน้าเดียวกันได้ เช่น คุณอาจมีปุ่มที่ด้านบนและด้านล่างของหน้าเว็บยาวๆ

หากพารามิเตอร์ data-src และ data-filename เหมือนกันสำหรับปุ่มหลายปุ่ม การบันทึกจากปุ่มปุ่มหนึ่งจะทำให้ปุ่มที่คล้ายกันทั้งหมดแสดงข้อมูลความคืบหน้าเดียวกัน หากมีการคลิกปุ่มต่างๆ หลายปุ่ม ระบบจะบันทึกตามลำดับ

จัดการปุ่มและทรัพยากรในโดเมนอื่น

หากปุ่ม "บันทึกไปที่ไดรฟ์" อยู่ในหน้าเว็บอื่นที่ไม่ใช่แหล่งข้อมูล คำขอให้บันทึกไฟล์ต้องใช้ กลไกการแชร์ทรัพยากรข้ามโดเมน (CORS) เพื่อเข้าถึง ทรัพยากร CORS เป็นกลไกที่ช่วยให้เว็บแอปพลิเคชันในโดเมนหนึ่งเข้าถึงทรัพยากรจากเซิร์ฟเวอร์ในโดเมนอื่นได้

ตัวอย่างเช่น หากวางปุ่ม "บันทึกไปที่ไดรฟ์" ไว้ในหน้าเว็บที่ http://example.com/page.html และระบุแหล่งข้อมูลเป็น data-src="https://otherserver.com/files/file.pdf" ปุ่มจะเข้าถึง PDF ไม่ได้ เว้นแต่เบราว์เซอร์จะใช้ CORS เพื่อเข้าถึงทรัพยากรได้

URL data-src สามารถแสดงจากโดเมนอื่นได้ แต่การตอบกลับจากเซิร์ฟเวอร์ HTTP ต้องรองรับคำขอ HTTP OPTION และมีส่วนหัว HTTP พิเศษต่อไปนี้

Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Range
Access-Control-Expose-Headers: Cache-Control, Content-Encoding, Content-Range

Access-Control-Allow-Origin สามารถมีค่าเป็น * เพื่ออนุญาต CORS จากโดเมนใดก็ได้ หรือจะระบุโดเมนที่มีสิทธิ์เข้าถึงทรัพยากรผ่าน CORS เช่น http://example.com/page.html ก็ได้ หากคุณไม่มีเซิร์ฟเวอร์สำหรับโฮสต์เนื้อหา ให้ลองใช้ Google App Engine

ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบของเซิร์ฟเวอร์เกี่ยวกับวิธีเปิดใช้ CORS จากต้นทางที่แสดงปุ่ม "บันทึกไปที่ไดรฟ์" ดูข้อมูลเพิ่มเติมเกี่ยวกับการเปิดใช้เซิร์ฟเวอร์สำหรับ CORS ได้ที่ ฉันต้องการเพิ่มการรองรับ CORS ลงในเซิร์ฟเวอร์

JavaScript API

JavaScript ของปุ่ม "บันทึกไปที่ไดรฟ์" กำหนดฟังก์ชันการแสดงผลปุ่ม 2 ฟังก์ชันภายใต้เนมสเปซ gapi.savetodrive หากปิดใช้การแสดงผลอัตโนมัติ คุณต้องเรียกใช้ฟังก์ชันใดฟังก์ชันหนึ่ง โดยตั้งค่า parsetags เป็น explicit

วิธีการ คำอธิบาย
gapi.savetodrive.render(
container,
parameters
)
แสดงผลคอนเทนเนอร์ที่ระบุเป็นวิดเจ็ตปุ่ม "บันทึกไปที่ไดรฟ์"
คอนเทนเนอร์
คอนเทนเนอร์ที่จะแสดงผลเป็นปุ่ม "บันทึกไปที่ไดรฟ์" ระบุรหัสของคอนเทนเนอร์ (สตริง) หรือองค์ประกอบ DOM เอง
พารามิเตอร์
ออบเจ็กต์ที่มีแอตทริบิวต์ของแท็ก "บันทึกไปที่ไดรฟ์" เป็นคู่คีย์=ค่า โดยไม่มีคำนำหน้า data- เช่น {"src": "//example.com/path/to/myfile.pdf", "filename": "My Statement.pdf", "sitename": "My Company Name"}.
gapi.savetodrive.go(
opt_container
)
แสดงผลแท็กและคลาส "บันทึกไปที่ไดรฟ์" ทั้งหมดในคอนเทนเนอร์ที่ระบุ คุณควรใช้ฟังก์ชันนี้ก็ต่อเมื่อ parsetags ถูกตั้งค่า เป็น explicit ซึ่งคุณอาจทำเพื่อเหตุผลด้านประสิทธิภาพ
opt_container
คอนเทนเนอร์ที่มีแท็กปุ่ม "บันทึกไปที่ไดรฟ์" ที่จะแสดงผล ระบุรหัสของคอนเทนเนอร์ (สตริง) หรือองค์ประกอบ DOM เอง หากไม่ระบุพารามิเตอร์ opt_container ระบบจะแสดงผลแท็ก "บันทึกไปที่ไดรฟ์" ทั้งหมดในหน้าเว็บ

ตัวอย่าง JavaScript "บันทึกไปที่ไดรฟ์" ที่มีการโหลดแบบชัดแจ้ง

<!DOCTYPE html>
    <html>
      <head>
        <title>Save to Drive Demo: Explicit Load</title>
        <link rel="canonical" href="http://www.example.com">
        <script src="https://apis.google.com/js/platform.js" async defer>
          {parsetags: 'explicit'}
        </script>
      </head>
      <body>
        <div id="container">
          <div class="g-savetodrive"
             data-src="//example.com/path/to/myfile.pdf"
             data-filename="My Statement.pdf"
             data-sitename="My Company Name">
          <div>
        </div>
        <script type="text/javascript">
          gapi.savetodrive.go('container');
        </script>
      </body>
    </html>

ตัวอย่าง JavaScript "บันทึกไปที่ไดรฟ์" ที่มีการแสดงผลแบบชัดแจ้ง

    <!DOCTYPE html>
    <html>
      <head>
        <title>Save to Drive Demo: Explicit Render</title>
        <link rel="canonical" href="http://www.example.com">
        <script>
          window.___gcfg = {
            parsetags: 'explicit'
          };
        </script>
        <script src="https://apis.google.com/js/platform.js" async defer></script>
      </head>
      <body>
        <a href="javascript:void(0)" id="render-link">Render the Save to Drive button</a>
        <div id="savetodrive-div"></div>
        <script>
          function renderSaveToDrive() {
            gapi.savetodrive.render('savetodrive-div', {
              src: '//example.com/path/to/myfile.pdf',
              filename: 'My Statement.pdf',
              sitename: 'My Company Name'
            });
          }
          document.getElementById('render-link').addEventListener('click', renderSaveToDrive);
        </script>
      </body>
    </html>

แปลปุ่ม "บันทึกไปที่ไดรฟ์" เป็นภาษาท้องถิ่น

หากหน้าเว็บรองรับภาษาใดภาษาหนึ่ง ให้ตั้งค่าตัวแปร window.___gcfg.lang เป็นภาษานั้น หากไม่ได้ตั้งค่า ระบบจะใช้ภาษาของ Google ไดรฟ์ของผู้ใช้

ดูค่ารหัสภาษาที่ใช้ได้ที่ รายการรหัสภาษาที่รองรับ

    <!DOCTYPE html>
    <html>
      <head>
        <title>Save to Drive Demo: Async Load with Language</title>
        <link rel="canonical" href="http://www.example.com">
      </head>
      <body>
        <div class="g-savetodrive"
             data-src="//example.com/path/to/myfile.pdf"
             data-filename="My Statement.pdf"
             data-sitename="My Company Name">
        </div>

        <script type="text/javascript">
          window.___gcfg = {
            lang: 'en-US'
          };
        </script>
        <script src = 'https://apis.google.com/js/platform.js' async defer></script>

      </body>
    </html>

การแก้ปัญหา

หากพบข้อผิดพลาด XHR เมื่อดาวน์โหลด URL data-src ให้ตรวจสอบว่า ทรัพยากรมีอยู่จริงและคุณไม่ได้พบปัญหา CORS

หากไฟล์ขนาดใหญ่ถูกตัดให้เหลือ 2 MB แสดงว่าเซิร์ฟเวอร์ของคุณไม่ได้ แสดง Content-Range ซึ่งอาจเป็นปัญหา CORS