Загрузка API Google Диска в определенную папку

Я пытаюсь создать проект, содержащий nextjs (машинописный текст), nextauth и API Google Drive. Его основными функциями будут загрузка, удаление и управление папками. Дошёл до того, что могу загружать файлы на свой Google Диск.

Это маршруты API-

import NextAuth from "next-auth/next"
import GoogleProvider from "next-auth/providers/google" 

export const authOptions = ({
    providers: [
        GoogleProvider({
            clientId : process.env.GOOGLE_CLIENT_ID ?? "" ,
            clientSecret : process.env.GOOGLE_CLIENT_SECRET ?? "",
            authorization: { 
              params: 
              { 
                scope: "openid email profile https://www.googleapis.com/auth/drive.file" 
                //
              } 
            },
        })
    ],
    callbacks: {
      async jwt({token, user , account} : any){ 
        //console.info("Account Access Token : " , token.accessToken)
        if (account) {
          token.accessToken = account.access_token;
        }
        return token
      },
      async session({ session, token } : any) {
        const newSession = {
          ...session,
          accessToken: token.accessToken,
        };
      
        //console.info("New Session Object:", newSession);
        return newSession;
      },
    }
})
 
const handler = NextAuth(authOptions)
export {handler as GET, handler as POST}

and as for the main component or main function that im using for now
const handleFileUpload = async (e : any) => {
    e.preventDefault()
    const file = e.target.files[0]
    const metadata = {
      name:file.name
    }
    const body = new FormData()
    body.append('metadata', new Blob([JSON.stringify(metadata)],{
      type: "application/json"
    }))
      body.append("file" , file)
 
      console.info("Body Data : ", body) 
      try { 
        const response = await fetch(
          `https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart` ,
          { 
            method : "POST",
            body : body,
            headers: {
              Authorization: `Bearer ${session.accessToken}`
            }
        })

        console.info("Response : " , response)

        if (response.ok){
          const responseData = await response.json()
          const fileId = responseData.id
          const fileUrl = `http"//drive.google.com/file/d/${fileId}/view`  
        } 
      } catch (error){
        console.error('Error uploading file:', error);  
      }
  } 

Теперь у меня проблема с загрузкой в ​​определенную папку. даже после проверки моего accessToken, чтобы убедиться, что он работает правильно, и использования 'parents = {folderId} он все еще не соответствует месту загрузки, хотя он все еще загружается, но только в местоположение по умолчанию (Мой диск), я просто не могу его правильно понять . Я был бы признателен, если бы кто-нибудь мог объяснить мне и помочь мне понять здесь.

Код взят из https://thewikihow.com/video_abyoZC6dLCc

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я считаю, что ваша цель состоит в следующем.

  • Вы хотите загрузить файл в определенную папку с помощью Drive API.

В этом случае измените свой сценарий следующим образом. В этой модификации изменяются метаданные тела вашего запроса.

От:

const metadata = {
  name:file.name
}

К:

const metadata = {
  name: file.name,
  parents: ["###"] // Please set the folder ID.
}

Примечание:

  • Судя по вашему сценарию показа, я подумал, что вы можете использовать сервисную учетную запись. Если я правильно понимаю, если вы хотите загрузить файл в папку на диске сервисной учетной записи или у сервисной учетной записи уже есть разрешение на запись в папку, это можно просто сделать с помощью вышеуказанной модификации. Но если вы хотите загрузить файл на другой диск, отличный от диска учетной записи службы, и у учетной записи службы никогда не было разрешения на запись, поделитесь папкой с учетной записью службы и загрузите файл в папку. Пожалуйста, будьте осторожны с этим.

Ссылка:

  • Метод: files.create

спасибо, это очень помогло, теперь я могу попробовать выяснить, это GET, большое спасибо, очень ценю

user14670265 28.06.2024 17:10

@user14670265 user14670265 Спасибо за ответ. Я рад, что ваша проблема была решена. И тебе спасибо.

Tanaike 29.06.2024 03:09

Другие вопросы по теме