Мне нужно создать изображение для предварительного просмотра для каждого файла, который загружается в мою корзину Google Cloud Storage. Для этого я использую пакет filepreview npm.
После того, как я загружу файл, я должен увидеть новое изображение с предварительным просмотром файла, но оно отсутствует, и в журнале ошибок говорится:
Error: spawnSync file ENOENT
at exports._errnoException (util.js:1020:11)
at spawnSync (child_process.js:451:20)
at Object.execFileSync (child_process.js:488:13)
at Object.generate (/user_code/node_modules/filepreview/filepreview.js:41:40)
at exports.generatePreviewImage.event (/user_code/index.js:27:22)
at /var/tmp/worker/worker.js:770:24
at process._tickDomainCallback (internal/process/next_tick.js:135:7)
Я предполагаю, что путь к файлу неверен. Может ли это быть проблемой? Имя загруженного файла — kitten.png. Вот моя функция:
exports.generatePreviewImage = event => {
const object = event.data || event; // Node 6: event.data === Node 8+: event
const file = storage.bucket(object.bucket).file(object.name);
const filePath = `gs://${object.bucket}/${object.name}`;
const newFilePath = `gs://${object.bucket}/${object.name}-thumb.png`;
console.info(`filePath: ${filePath}`); // This logs 'file: gs://my-bucket/kitten.png'
console.info(`newFilePath: ${newFilePath}`); // This logs 'gs://my-bucket/kitten.png-thumb.png'
return filepreview.generate(filePath, newFilePath, function(error) {
if (error) {
return console.info('Error is now: ', error);
}
console.info(`File preview is: ${newFilePath}`);
});
}
@DougStevenson - я думаю, ты прав. Я полагаю, что правильный способ сделать это — загрузить файл локально, выполнить работу, а затем загрузить новый сгенерированный файл обратно в корзину. Я делаю это сейчас, но использую другой пакет, но у меня другая ошибка. См. новый вопрос: stackoverflow.com/questions/54417900/…
Я получаю ту же ошибку из заголовка этого поста, даже если я загружаю файл и использую filepreview, поэтому он не связан только с URL-адресами gs://.
Вы должны иметь возможность скачивать локально с помощью SDK и загружать обратно. Это обычная схема. Вы можете найти его в официальных образцах. github.com/firebase/functions-samples/tree/Node-8/…
@DougStevenson - я использую не Firebase, а Google Cloud Storage. Во всяком случае, я могу скачать и загрузить файл, проблема с самой конвертацией.
Не имеет значения, Firebase просто упаковывает те же облачные продукты. Шаблон сохраняется, независимо от того, какие SDK вы используете. Возможно, вам следует показать вывод всех ваших журналов печати, чтобы увидеть, имеют ли они смысл.
@DougStevenson - я просмотрел отправленные вами функции Firebase, но они применяются только к загруженным изображениям, и это уже работает для меня. Так что я могу сделать это для изображения, загруженного в ведро, но я не могу сделать это для файлов PDF (или любых других файлов, но я ориентируюсь как минимум на PDF. Если мне удастся сделать это для изображения и PDF-файлов, этого достаточно). Извините, я не слишком ясно выразился по этому поводу. Пожалуйста, посмотрите мой другой пост и спасибо за ваши советы: stackoverflow.com/questions/54417900/…





Предполагается ли, что этот «предварительный просмотр файла» понимает, как работать с URL-адресами Google Cloud Storage, начинающимися с «gs»? Подозреваю, что нет.