import os from 'os';
import fs from 'fs';
import https from 'https';

async function downloadFileFromURL(url, fileLocation) {
 return await new Promise((resolve, reject) => {
 https
 .get(url, (response) => {
 const code = response.statusCode ?? 0;

 if (code >= 400) {
 return reject(new Error(response.statusMessage));
 }

 // 處理重定向
 if (code > 300 && code < 400 && !!response.headers.location) {
 return await downloadFile(response.headers.location);
 }

 // 將文件保存到磁碟
 const fileWriter = fs
 .createWriteStream(fileLocation)
 .on('finish', () => {
 resolve({
 fileLocation,
 contentType: response.headers['content-type'],
 });
 });

 response.pipe(fileWriter);
 })
 .on('error', (error) => {
 reject(error);
 });
 });
}

const imageUrl = 'https://.... bla bla';
const fileLocation = os.tmpdir() + '/' + rnd(10, rnd.alphaLower);

await downloadFileFromURL(imageUrl, fileLocation);

Tags: Node, URL, 圖片下載