GAS小程式:影像代理伺服器 cowork-with-ai

這個小程式是詢問ChatGPT後得到的idea

只要將這個script發布成網頁應用程式就能代理影像URL

備註:如果來源有透過token,user-agent阻擋存取,則還需要改一下這個小程式

代理影像的使用方式是給予imageUrl參數, 就會回傳該影像的DataURL

該如何使用DataURL會另外發文

AI解釋生成的這段程式碼:


定義一個 proxyImage() 函式,接受一個 imageUrl 引數。 
使用 UrlFetchApp.fetch() 從指定的 URL 下載影像檔案,並檢查回應狀態碼。 
如果回應狀態碼為 200(成功),就將影像內容和 MIME 型別設定到 ContentService.createTextOutput() 中返回。
如果回應狀態碼不為 200,就返回一個錯誤訊息。
定義一個 doGet() 函式,它會接收 URL 引數 imageUrl,並呼叫 proxyImage() 函式處理請求。 
要使用這個代理伺服器,您可以在應用程式中使用以下 URL 格式: 

https://script.google.com/macros/s/your-script-id/exec?imageUrl=https://example.com/image.jpg   
將 your-script-id 替換為您部署 Google Apps Script 應用程式的 ID。
這樣就可以讓您的應用程式繞過跨來源資源共用(CORS)限制,透過代理伺服器存取外部影像檔案。

程式碼如下


function blobToDataUrl(blob) {
return 'data:' + blob.getContentType() +
';base64,' + Utilities.base64Encode(blob.getBytes());
}

function proxyAndDownloadImage(imageUrl) {
const response = UrlFetchApp.fetch(imageUrl, {
muteHttpExceptions: true
});
const responseCode = response.getResponseCode();
if (responseCode === 200) {
const responseContent = blobToDataUrl(response.getBlob());
return ContentService.createTextOutput(responseContent);
} else {
return ContentService
.createTextOutput(`Fetch error, ${responseCode} ${imageUrl}`)
.setMimeType(ContentService.MimeType.TEXT);
}
}

function doGet(e) {
const imageUrl = e.parameter.imageUrl;
if (!imageUrl) {
return ContentService
.createTextOutput('Please provide an image URL')
.setMimeType(ContentService.MimeType.TEXT);
}

return proxyAndDownloadImage(imageUrl);
}

留言