googleapis / google-api-nodejs-client

Google's officially supported Node.js client library for accessing Google APIs. Support for authorization and authentication with OAuth 2.0, API Keys and JWT (Service Tokens) is included.
https://googleapis.dev/nodejs/googleapis/latest/
Apache License 2.0
11.26k stars 1.91k forks source link

TypeError [ERR_INVALID_ARG_TYPE]: The "paths[0]" argument must be of type string. Received an instance of Object #3442

Open mohamed-abd-elkahlk opened 4 months ago

mohamed-abd-elkahlk commented 4 months ago

hi i got this error "TypeError [ERR_INVALID_ARG_TYPE]: The "paths[0]" argument must be of type string. Received an instance of Object" every time i try to upload a file to my drive account and here is the code

"use server";
import { google } from "googleapis";
import * as fs from "fs";
import { join } from "path";
export async function addFile(e: FormData) {
  const file: File | null = e.get("file") as unknown as File;

  const bytes = await file?.arrayBuffer();
  const buffer = Buffer.from(bytes);

  const path = join("/", "/tmp", file.name.trim());
  fs.writeFileSync(path, buffer);

  const keyFile = await JSON.parse(
    fs.readFileSync(process.cwd() + `/src/app/key.json`, "utf-8")
  );

  const auth = new google.auth.GoogleAuth({
    keyFile,
    scopes: ["https://www.googleapis.com/auth/drive"],
  });
  const drive = google.drive({
    version: "v3",
    auth,
  });

  const response = () => {
    return new Promise((resolve, reject) => {
      drive.files.create(
        {
          requestBody: {
            name: file.name,
            parents: ["1TebOIirZf_P9xb2Vc2fAVhdMrTU_rN-U"],
          },
          media: {
            body: fs.createReadStream(path),
            mimeType: file.type.toString(),
          },
          fields: "id",
        },
        function (err, file) {
          if (err) {
            reject(err);
          }
          resolve(file);
        }
      );
    });
  };

  await response().catch((err) => console.log(err));
}

so could any one help with that or have a tip for solve this problem i use next.js 14.1.0 as a javascript frame work node with version 20.9.0

tumetus commented 2 months ago

I'm facing this same issue.

Is there currently a way to upload files with Next.js 14+ or do we need to wait for this to be fixed? Any timeline for the fix? Thanks!

KenzieFu commented 1 month ago

Hi, so recently I also having this kind of issue while uploading my images to the Google Cloud storage with the help of multer and storing it to memory storage before uploading to the cloud.

I figured out that the keyFile that we are trying to store is a json object, but the keyFile attribute only wants a path to the key.json image image

I hope this gonna solves your issues. I'm sorry because my English is not that good :)