В Google Cloud Storage версии 1 я успешно использовал приведенную ниже функцию для загрузки файлов. Он сохраняет файл в уникальном месте во временном каталоге для дальнейшей обработки.
Похоже, что Cloud Storage версии 4 больше не принимает URL в качестве источника. Он будет жаловаться, что файл не существует.
import { File } from "@google-cloud/storage";
import { join, parse } from "path";
import { generate } from "shortid";
import { URL } from "url";
import { getBucket } from "./helpers";
/**
* This function takes a HTTP URL and uploads it to a destination in the bucket
* under the same filename or a generated unique name.
*/
export async function uploadFile(
url: string,
destinationDir: string,
options: { generateUniqueFilename: boolean } = {
generateUniqueFilename: true
}
): Promise<File> {
try {
const pathname = new URL(url).pathname;
const { ext, base } = parse(pathname);
let destination = join(destinationDir, base);
if (options.generateUniqueFilename) {
const shortId = generate();
destination = join(destinationDir, `${shortId}${ext}`);
}
const bucket = await getBucket();
const [file] = await bucket.upload(url, {
destination,
public: true
});
console.log(`Successfully uploaded ${url} to ${destination}`);
return file;
} catch (err) {
throw new Error(
`Failed to upload ${url} to ${destinationDir}: ${err.message}`
);
}
}
Как решить эту проблему с текущей версией? Я не могу найти много информации по этому вопросу. Использование gsutil не вариант для меня. Мне нужно передать URL в облачную функцию и загрузить оттуда.