فایل‌ها را از Google Forms در Google Drive آپلود کنید

سطح کدنویسی : مبتدی
مدت زمان : ۱۰ دقیقه
نوع پروژه : اتوماسیون با تریگر رویداد محور

اهداف

  • بفهمید که راه حل چه کاری انجام می‌دهد.
  • درک کنید که سرویس‌های Apps Script در این راهکار چه کاری انجام می‌دهند.
  • اسکریپت را تنظیم کنید.
  • اسکریپت را اجرا کنید.

درباره این راهکار

همزمان با استفاده از فرم‌های گوگل، فایل‌ها را در گوگل درایو آپلود و سازماندهی کنید. این فرم شامل ورودی‌هایی برای آپلود فایل‌ها و نحوه سازماندهی آنها است.

تصویر فرم آپلود فایل

چگونه کار می‌کند؟

یک تابع راه‌اندازی، پوشه‌ای برای ذخیره تمام فایل‌های آپلود شده و یک تریگر ایجاد می‌کند که هر بار که کسی فرم را ارسال می‌کند، فعال می‌شود. وقتی کاربر فرم را پر می‌کند، فایل‌هایی را برای آپلود و یک زیرپوشه برای ذخیره فایل‌ها در آن انتخاب می‌کند. پس از ارسال فرم توسط کاربر، اسکریپت فایل‌ها را به زیرپوشه مربوطه هدایت می‌کند. اگر پوشه هنوز وجود نداشته باشد، اسکریپت آن را ایجاد می‌کند.

سرویس‌های اسکریپت برنامه‌ها

این راهکار از سرویس‌های زیر استفاده می‌کند:

  • سرویس اسکریپت - تریگری ایجاد می‌کند که هر بار که کسی فرم را ارسال می‌کند، فعال می‌شود.
  • سرویس Properties - شناسه‌ی تریگری که اسکریپت در طول راه‌اندازی ایجاد می‌کند را ذخیره می‌کند تا از ایجاد تریگرهای تکراری جلوگیری شود.
  • سرویس درایو - در طول راه‌اندازی، محل فرم در درایو را دریافت کرده و یک پوشه در همان محل ایجاد می‌کند. وقتی کاربر فرم را ارسال می‌کند، سرویس درایو فایل‌ها را به آن پوشه و در صورت انتخاب، به یک زیرپوشه تعیین‌شده هدایت می‌کند. اگر زیرپوشه هنوز وجود نداشته باشد، اسکریپت آن را ایجاد می‌کند.
  • سرویس فرم‌ها - نام فایل‌ها و پوشه‌ای که کاربر پس از ارسال فرم انتخاب کرده است را دریافت کرده و آن را به سرویس Drive ارسال می‌کند.

پیش‌نیازها

برای استفاده از این نمونه، به پیش‌نیازهای زیر نیاز دارید:

  • یک حساب گوگل (حساب‌های کاربری گوگل ورک‌اسپیس ممکن است نیاز به تأیید مدیر داشته باشند).
  • یک مرورگر وب با دسترسی به اینترنت.

اسکریپت را تنظیم کنید

فرم را ایجاد کنید

  1. به forms.google.com بروید و روی خالی کلیک کنید.
  2. روی فرم بدون عنوان کلیک کنید و نام فرم را به «بارگذاری فایل‌ها در درایو» تغییر دهید.
  3. روی سوال بدون عنوان کلیک کنید و نام سوال را به Subfolder تغییر دهید.
  4. در سوال مربوط به زیرپوشه ، روی More > Description کلیک کنید.
  5. برای توضیحات ، زیرپوشه مورد نظر برای ذخیره فایل‌هایتان را انتخاب کنید. اگر <None> را انتخاب کنید، فایل‌ها در پوشه فایل‌های آپلود شده ذخیره می‌شوند.
  6. گزینه‌های زیر را به سوال Subfolder اضافه کنید:
    • هیچ کدام
    • پروژه الف
    • پروژه ب
    • پروژه سی
  7. برای اینکه سوال را الزامی کنید، روی «الزامی» کلیک کنید.
  8. روی افزودن سوال کلیک کنید.
  9. روی گزینه چندگزینه‌ای کلیک کنید و آپلود فایل را انتخاب کنید.
  10. روی ادامه کلیک کنید.
  11. برای سوال ، عبارت «فایل‌ها برای آپلود» را وارد کنید. می‌توانید نوع فایل‌ها و حداکثر تعداد فایل‌هایی را که می‌خواهید افراد آپلود کنند، انتخاب کنید.
  12. برای اینکه سوال را الزامی کنید، روی «الزامی» کلیک کنید.

پروژه Apps Script را ایجاد کنید

  1. از فرم، روی More > Script editor کلیک کنید.
  2. روی پروژه بدون عنوان کلیک کنید و نام پروژه را به «بارگذاری فایل‌ها در درایو» تغییر دهید.
  3. برای ایجاد یک فایل اسکریپت دیگر، روی فایل > اسکریپت کلیک کنید. نام فایل را Setup .
  4. محتوای هر دو فایل اسکریپت را با محتوای زیر جایگزین کنید:

    کد.gs

    راهکارها/اتوماسیون‌ها/آپلود-فایل‌ها/Code.js
    // TODO Before you start using this sample, you must run the setUp()
    // function in the Setup.gs file.
    
    // Application constants
    const APP_TITLE = "Upload files to Drive from Forms";
    const APP_FOLDER_NAME = "Upload files to Drive (File responses)";
    
    // Identifies the subfolder form item
    const APP_SUBFOLDER_ITEM = "Subfolder";
    const APP_SUBFOLDER_NONE = "<None>";
    
    /**
     * Gets the file uploads from a form response and moves files to the corresponding subfolder.
     *
     * @param {object} event - Form submit.
     */
    function onFormSubmit(e) {
      try {
        // Gets the application root folder.
        let destFolder = getFolder_(APP_FOLDER_NAME);
    
        // Gets all form responses.
        const itemResponses = e.response.getItemResponses();
    
        // Determines the subfolder to route the file to, if any.
        let subFolderName;
        const dest = itemResponses.filter(
          (itemResponse) =>
            itemResponse.getItem().getTitle().toString() === APP_SUBFOLDER_ITEM,
        );
    
        // Gets the destination subfolder name, but ignores if APP_SUBFOLDER_NONE was selected;
        if (dest.length > 0) {
          if (dest[0].getResponse() !== APP_SUBFOLDER_NONE) {
            subFolderName = dest[0].getResponse();
          }
        }
        // Gets the subfolder or creates it if it doesn't exist.
        if (subFolderName !== undefined) {
          destFolder = getSubFolder_(destFolder, subFolderName);
        }
        console.log(`Destination folder to use:
        Name: ${destFolder.getName()}
        ID: ${destFolder.getId()}
        URL: ${destFolder.getUrl()}`);
    
        // Gets the file upload response as an array to allow for multiple files.
        const fileUploads = itemResponses
          .filter(
            (itemResponse) =>
              itemResponse.getItem().getType().toString() === "FILE_UPLOAD",
          )
          .map((itemResponse) => itemResponse.getResponse())
          .reduce((a, b) => a.concat(b), []);
    
        // Moves the files to the destination folder.
        if (fileUploads.length > 0) {
          for (const fileId of fileUploads) {
            DriveApp.getFileById(fileId).moveTo(destFolder);
            console.log(`File Copied: ${fileId}`);
          }
        }
      } catch (err) {
        console.log(err);
      }
    }
    
    /**
     * Returns a Drive folder under the passed in objParentFolder parent
     * folder. Checks if folder of same name exists before creating, returning
     * the existing folder or the newly created one if not found.
     *
     * @param {object} objParentFolder - Drive folder as an object.
     * @param {string} subFolderName - Name of subfolder to create/return.
     * @return {object} Drive folder
     */
    function getSubFolder_(objParentFolder, subFolderName) {
      // Iterates subfolders of parent folder to check if folder already exists.
      const subFolders = objParentFolder.getFolders();
      while (subFolders.hasNext()) {
        const folder = subFolders.next();
    
        // Returns the existing folder if found.
        if (folder.getName() === subFolderName) {
          return folder;
        }
      }
      // Creates a new folder if one doesn't already exist.
      return objParentFolder
        .createFolder(subFolderName)
        .setDescription(
          `Created by ${APP_TITLE} application to store uploaded Forms files.`,
        );
    }

    تنظیمات.gs

    راهکارها/اتوماسیون‌ها/آپلود-فایل‌ها/Setup.js
    // TODO You must run the setUp() function before you start using this sample.
    
    /**
     * The setUp() function performs the following:
     *  - Creates a Google Drive folder named by the APP_FOLDER_NAME
     *    variable in the Code.gs file.
     *  - Creates a trigger to handle onFormSubmit events.
     */
    function setUp() {
      // Ensures the root destination folder exists.
      const appFolder = getFolder_(APP_FOLDER_NAME);
      if (appFolder !== null) {
        console.log(`Application folder setup.
        Name: ${appFolder.getName()}
        ID: ${appFolder.getId()}
        URL: ${appFolder.getUrl()}`);
      } else {
        console.log("Could not setup application folder.");
      }
      // Calls the function that creates the Forms onSubmit trigger.
      installTrigger_();
    }
    
    /**
     * Returns a folder to store uploaded files in the same location
     * in Drive where the form is located. First, it checks if the folder
     * already exists, and creates it if it doesn't.
     *
     * @param {string} folderName - Name of the Drive folder.
     * @return {object} Google Drive Folder
     */
    function getFolder_(folderName) {
      // Gets the Drive folder where the form is located.
      const ssId = FormApp.getActiveForm().getId();
      const parentFolder = DriveApp.getFileById(ssId).getParents().next();
    
      // Iterates through the subfolders to check if folder already exists.
      // The script checks for the folder name specified in the APP_FOLDER_NAME variable.
      const subFolders = parentFolder.getFolders();
      while (subFolders.hasNext()) {
        const folder = subFolders.next();
    
        // Returns the existing folder if found.
        if (folder.getName() === folderName) {
          return folder;
        }
      }
      // Creates a new folder if one doesn't already exist.
      return parentFolder
        .createFolder(folderName)
        .setDescription(
          `Created by ${APP_TITLE} application to store uploaded files.`,
        );
    }
    
    /**
     * Installs trigger to capture onFormSubmit event when a form is submitted.
     * Ensures that the trigger is only installed once.
     * Called by setup().
     */
    function installTrigger_() {
      // Ensures existing trigger doesn't already exist.
      const propTriggerId =
        PropertiesService.getScriptProperties().getProperty("triggerUniqueId");
      if (propTriggerId !== null) {
        const triggers = ScriptApp.getProjectTriggers();
        for (const t in triggers) {
          if (triggers[t].getUniqueId() === propTriggerId) {
            console.log(
              `Trigger with the following unique ID already exists: ${propTriggerId}`,
            );
            return;
          }
        }
      }
      // Creates the trigger if one doesn't exist.
      const triggerUniqueId = ScriptApp.newTrigger("onFormSubmit")
        .forForm(FormApp.getActiveForm())
        .onFormSubmit()
        .create()
        .getUniqueId();
      PropertiesService.getScriptProperties().setProperty(
        "triggerUniqueId",
        triggerUniqueId,
      );
      console.log(
        `Trigger with the following unique ID was created: ${triggerUniqueId}`,
      );
    }
    
    /**
     * Removes all script properties and triggers for the project.
     * Use primarily to test setup routines.
     */
    function removeTriggersAndScriptProperties() {
      PropertiesService.getScriptProperties().deleteAllProperties();
      // Removes all triggers associated with project.
      const triggers = ScriptApp.getProjectTriggers();
      for (const t in triggers) {
        ScriptApp.deleteTrigger(triggers[t]);
      }
    }
    
    /**
     * Removes all form responses to reset the form.
     */
    function deleteAllResponses() {
      FormApp.getActiveForm().deleteAllResponses();
    }

اسکریپت را اجرا کنید

  1. در ویرایشگر Apps Script، به فایل Setup.gs بروید.
  2. در منوی کشویی تابع، گزینه setUp را انتخاب کنید.
  3. روی اجرا کلیک کنید.
  4. وقتی از شما خواسته شد، اسکریپت را تأیید کنید. اگر صفحه رضایت OAuth هشدار « این برنامه تأیید نشده است» را نشان می‌دهد، با انتخاب Advanced > Go to {Project Name} (unsafe) ادامه دهید.

  5. به فرم برگردید و روی پیش‌نمایش کلیک کنید آیکون پیش‌نمایش .

  6. در فرم، یک زیرپوشه انتخاب کنید و فایلی را آپلود کنید.

  7. روی ارسال کلیک کنید.

  8. به درایو بروید و پوشه « بارگذاری فایل‌ها در درایو (پاسخ‌های فایل)» را باز کنید. فایل‌های آپلود شده شما در زیرپوشه‌ای که در فرم انتخاب کرده‌اید، قرار دارند.

مشارکت‌کنندگان

این نمونه توسط گوگل و با کمک متخصصان توسعه‌دهنده گوگل نگهداری می‌شود.

مراحل بعدی

،

سطح کدنویسی : مبتدی
مدت زمان : ۱۰ دقیقه
نوع پروژه : اتوماسیون با تریگر رویداد محور

اهداف

  • بفهمید که راه حل چه کاری انجام می‌دهد.
  • درک کنید که سرویس‌های Apps Script در این راهکار چه کاری انجام می‌دهند.
  • اسکریپت را تنظیم کنید.
  • اسکریپت را اجرا کنید.

درباره این راهکار

همزمان با استفاده از فرم‌های گوگل، فایل‌ها را در گوگل درایو آپلود و سازماندهی کنید. این فرم شامل ورودی‌هایی برای آپلود فایل‌ها و نحوه سازماندهی آنها است.

تصویر فرم آپلود فایل

چگونه کار می‌کند؟

یک تابع راه‌اندازی، پوشه‌ای برای ذخیره تمام فایل‌های آپلود شده و یک تریگر ایجاد می‌کند که هر بار که کسی فرم را ارسال می‌کند، فعال می‌شود. وقتی کاربر فرم را پر می‌کند، فایل‌هایی را برای آپلود و یک زیرپوشه برای ذخیره فایل‌ها در آن انتخاب می‌کند. پس از ارسال فرم توسط کاربر، اسکریپت فایل‌ها را به زیرپوشه مربوطه هدایت می‌کند. اگر پوشه هنوز وجود نداشته باشد، اسکریپت آن را ایجاد می‌کند.

سرویس‌های اسکریپت برنامه‌ها

این راهکار از سرویس‌های زیر استفاده می‌کند:

  • سرویس اسکریپت - تریگری ایجاد می‌کند که هر بار که کسی فرم را ارسال می‌کند، فعال می‌شود.
  • سرویس Properties - شناسه‌ی تریگری که اسکریپت در طول راه‌اندازی ایجاد می‌کند را ذخیره می‌کند تا از ایجاد تریگرهای تکراری جلوگیری شود.
  • سرویس درایو - در طول راه‌اندازی، محل فرم در درایو را دریافت کرده و یک پوشه در همان محل ایجاد می‌کند. وقتی کاربر فرم را ارسال می‌کند، سرویس درایو فایل‌ها را به آن پوشه و در صورت انتخاب، به یک زیرپوشه تعیین‌شده هدایت می‌کند. اگر زیرپوشه هنوز وجود نداشته باشد، اسکریپت آن را ایجاد می‌کند.
  • سرویس فرم‌ها - نام فایل‌ها و پوشه‌ای که کاربر پس از ارسال فرم انتخاب کرده است را دریافت کرده و آن را به سرویس Drive ارسال می‌کند.

پیش‌نیازها

برای استفاده از این نمونه، به پیش‌نیازهای زیر نیاز دارید:

  • یک حساب گوگل (حساب‌های کاربری گوگل ورک‌اسپیس ممکن است نیاز به تأیید مدیر داشته باشند).
  • یک مرورگر وب با دسترسی به اینترنت.

اسکریپت را تنظیم کنید

فرم را ایجاد کنید

  1. به forms.google.com بروید و روی خالی کلیک کنید.
  2. روی فرم بدون عنوان کلیک کنید و نام فرم را به «بارگذاری فایل‌ها در درایو» تغییر دهید.
  3. روی سوال بدون عنوان کلیک کنید و نام سوال را به Subfolder تغییر دهید.
  4. در سوال مربوط به زیرپوشه ، روی More > Description کلیک کنید.
  5. برای توضیحات ، زیرپوشه مورد نظر برای ذخیره فایل‌هایتان را انتخاب کنید. اگر <None> را انتخاب کنید، فایل‌ها در پوشه فایل‌های آپلود شده ذخیره می‌شوند.
  6. گزینه‌های زیر را به سوال Subfolder اضافه کنید:
    • هیچ کدام
    • پروژه الف
    • پروژه ب
    • پروژه سی
  7. برای اینکه سوال را الزامی کنید، روی «الزامی» کلیک کنید.
  8. روی افزودن سوال کلیک کنید.
  9. روی گزینه چندگزینه‌ای کلیک کنید و آپلود فایل را انتخاب کنید.
  10. روی ادامه کلیک کنید.
  11. برای سوال ، عبارت «فایل‌ها برای آپلود» را وارد کنید. می‌توانید نوع فایل‌ها و حداکثر تعداد فایل‌هایی را که می‌خواهید افراد آپلود کنند، انتخاب کنید.
  12. برای اینکه سوال را الزامی کنید، روی «الزامی» کلیک کنید.

پروژه Apps Script را ایجاد کنید

  1. از فرم، روی More > Script editor کلیک کنید.
  2. روی پروژه بدون عنوان کلیک کنید و نام پروژه را به «بارگذاری فایل‌ها در درایو» تغییر دهید.
  3. برای ایجاد یک فایل اسکریپت دیگر، روی فایل > اسکریپت کلیک کنید. نام فایل را Setup .
  4. محتوای هر دو فایل اسکریپت را با محتوای زیر جایگزین کنید:

    کد.gs

    راهکارها/اتوماسیون‌ها/آپلود-فایل‌ها/Code.js
    // TODO Before you start using this sample, you must run the setUp()
    // function in the Setup.gs file.
    
    // Application constants
    const APP_TITLE = "Upload files to Drive from Forms";
    const APP_FOLDER_NAME = "Upload files to Drive (File responses)";
    
    // Identifies the subfolder form item
    const APP_SUBFOLDER_ITEM = "Subfolder";
    const APP_SUBFOLDER_NONE = "<None>";
    
    /**
     * Gets the file uploads from a form response and moves files to the corresponding subfolder.
     *
     * @param {object} event - Form submit.
     */
    function onFormSubmit(e) {
      try {
        // Gets the application root folder.
        let destFolder = getFolder_(APP_FOLDER_NAME);
    
        // Gets all form responses.
        const itemResponses = e.response.getItemResponses();
    
        // Determines the subfolder to route the file to, if any.
        let subFolderName;
        const dest = itemResponses.filter(
          (itemResponse) =>
            itemResponse.getItem().getTitle().toString() === APP_SUBFOLDER_ITEM,
        );
    
        // Gets the destination subfolder name, but ignores if APP_SUBFOLDER_NONE was selected;
        if (dest.length > 0) {
          if (dest[0].getResponse() !== APP_SUBFOLDER_NONE) {
            subFolderName = dest[0].getResponse();
          }
        }
        // Gets the subfolder or creates it if it doesn't exist.
        if (subFolderName !== undefined) {
          destFolder = getSubFolder_(destFolder, subFolderName);
        }
        console.log(`Destination folder to use:
        Name: ${destFolder.getName()}
        ID: ${destFolder.getId()}
        URL: ${destFolder.getUrl()}`);
    
        // Gets the file upload response as an array to allow for multiple files.
        const fileUploads = itemResponses
          .filter(
            (itemResponse) =>
              itemResponse.getItem().getType().toString() === "FILE_UPLOAD",
          )
          .map((itemResponse) => itemResponse.getResponse())
          .reduce((a, b) => a.concat(b), []);
    
        // Moves the files to the destination folder.
        if (fileUploads.length > 0) {
          for (const fileId of fileUploads) {
            DriveApp.getFileById(fileId).moveTo(destFolder);
            console.log(`File Copied: ${fileId}`);
          }
        }
      } catch (err) {
        console.log(err);
      }
    }
    
    /**
     * Returns a Drive folder under the passed in objParentFolder parent
     * folder. Checks if folder of same name exists before creating, returning
     * the existing folder or the newly created one if not found.
     *
     * @param {object} objParentFolder - Drive folder as an object.
     * @param {string} subFolderName - Name of subfolder to create/return.
     * @return {object} Drive folder
     */
    function getSubFolder_(objParentFolder, subFolderName) {
      // Iterates subfolders of parent folder to check if folder already exists.
      const subFolders = objParentFolder.getFolders();
      while (subFolders.hasNext()) {
        const folder = subFolders.next();
    
        // Returns the existing folder if found.
        if (folder.getName() === subFolderName) {
          return folder;
        }
      }
      // Creates a new folder if one doesn't already exist.
      return objParentFolder
        .createFolder(subFolderName)
        .setDescription(
          `Created by ${APP_TITLE} application to store uploaded Forms files.`,
        );
    }

    تنظیمات.gs

    راهکارها/اتوماسیون‌ها/آپلود-فایل‌ها/Setup.js
    // TODO You must run the setUp() function before you start using this sample.
    
    /**
     * The setUp() function performs the following:
     *  - Creates a Google Drive folder named by the APP_FOLDER_NAME
     *    variable in the Code.gs file.
     *  - Creates a trigger to handle onFormSubmit events.
     */
    function setUp() {
      // Ensures the root destination folder exists.
      const appFolder = getFolder_(APP_FOLDER_NAME);
      if (appFolder !== null) {
        console.log(`Application folder setup.
        Name: ${appFolder.getName()}
        ID: ${appFolder.getId()}
        URL: ${appFolder.getUrl()}`);
      } else {
        console.log("Could not setup application folder.");
      }
      // Calls the function that creates the Forms onSubmit trigger.
      installTrigger_();
    }
    
    /**
     * Returns a folder to store uploaded files in the same location
     * in Drive where the form is located. First, it checks if the folder
     * already exists, and creates it if it doesn't.
     *
     * @param {string} folderName - Name of the Drive folder.
     * @return {object} Google Drive Folder
     */
    function getFolder_(folderName) {
      // Gets the Drive folder where the form is located.
      const ssId = FormApp.getActiveForm().getId();
      const parentFolder = DriveApp.getFileById(ssId).getParents().next();
    
      // Iterates through the subfolders to check if folder already exists.
      // The script checks for the folder name specified in the APP_FOLDER_NAME variable.
      const subFolders = parentFolder.getFolders();
      while (subFolders.hasNext()) {
        const folder = subFolders.next();
    
        // Returns the existing folder if found.
        if (folder.getName() === folderName) {
          return folder;
        }
      }
      // Creates a new folder if one doesn't already exist.
      return parentFolder
        .createFolder(folderName)
        .setDescription(
          `Created by ${APP_TITLE} application to store uploaded files.`,
        );
    }
    
    /**
     * Installs trigger to capture onFormSubmit event when a form is submitted.
     * Ensures that the trigger is only installed once.
     * Called by setup().
     */
    function installTrigger_() {
      // Ensures existing trigger doesn't already exist.
      const propTriggerId =
        PropertiesService.getScriptProperties().getProperty("triggerUniqueId");
      if (propTriggerId !== null) {
        const triggers = ScriptApp.getProjectTriggers();
        for (const t in triggers) {
          if (triggers[t].getUniqueId() === propTriggerId) {
            console.log(
              `Trigger with the following unique ID already exists: ${propTriggerId}`,
            );
            return;
          }
        }
      }
      // Creates the trigger if one doesn't exist.
      const triggerUniqueId = ScriptApp.newTrigger("onFormSubmit")
        .forForm(FormApp.getActiveForm())
        .onFormSubmit()
        .create()
        .getUniqueId();
      PropertiesService.getScriptProperties().setProperty(
        "triggerUniqueId",
        triggerUniqueId,
      );
      console.log(
        `Trigger with the following unique ID was created: ${triggerUniqueId}`,
      );
    }
    
    /**
     * Removes all script properties and triggers for the project.
     * Use primarily to test setup routines.
     */
    function removeTriggersAndScriptProperties() {
      PropertiesService.getScriptProperties().deleteAllProperties();
      // Removes all triggers associated with project.
      const triggers = ScriptApp.getProjectTriggers();
      for (const t in triggers) {
        ScriptApp.deleteTrigger(triggers[t]);
      }
    }
    
    /**
     * Removes all form responses to reset the form.
     */
    function deleteAllResponses() {
      FormApp.getActiveForm().deleteAllResponses();
    }

اسکریپت را اجرا کنید

  1. در ویرایشگر Apps Script، به فایل Setup.gs بروید.
  2. در منوی کشویی تابع، گزینه setUp را انتخاب کنید.
  3. روی اجرا کلیک کنید.
  4. وقتی از شما خواسته شد، اسکریپت را تأیید کنید. اگر صفحه رضایت OAuth هشدار « این برنامه تأیید نشده است» را نشان می‌دهد، با انتخاب Advanced > Go to {Project Name} (unsafe) ادامه دهید.

  5. به فرم برگردید و روی پیش‌نمایش کلیک کنید آیکون پیش‌نمایش .

  6. در فرم، یک زیرپوشه انتخاب کنید و فایلی را آپلود کنید.

  7. روی ارسال کلیک کنید.

  8. به درایو بروید و پوشه « بارگذاری فایل‌ها در درایو (پاسخ‌های فایل)» را باز کنید. فایل‌های آپلود شده شما در زیرپوشه‌ای که در فرم انتخاب کرده‌اید، قرار دارند.

مشارکت‌کنندگان

این نمونه توسط گوگل و با کمک متخصصان توسعه‌دهنده گوگل نگهداری می‌شود.

مراحل بعدی