Google脚本-从URL获取文件名

时间:2020-03-06 00:27:58

标签: google-apps-script google-sheets

我有一些URL,用于重定向和下载csv文件。我想获取文件的文件名。反正有可能吗。

这是我当前使用的代码:

function importCSVFromWeb(csvUrl,rownum,sheet) {
  var csvContent = UrlFetchApp.fetch(csvUrl).getContentText();
  var csvData = Utilities.parseCsv(csvContent);
var csvFileName =UrlFetchApp.fetch(csvUrl).getBlob().getName();
  //Logger.log(csvFileName);
  sheet.getRange(rownum, 1, csvData.length, csvData[0].length).setValues(csvData);
sheet.getRange(rownum, csvData[0].length, 1, 1).setValue(csvFileName);
sheet.getRange(rownum, csvData[0].length, 1, 1).copyTo(sheet.getRange(rownum+1, csvData[0].length,csvData.length,1));
sheet.deleteRow(rownum);
}

请协助。

这是下载csv的示例URL。

https://www.punters.com.au/form-guide/spreadsheet-987656

1 个答案:

答案 0 :(得分:1)

根据您的情况,您可以直接从UrlFetchApp.fetch(csvUrl)响应头的“ Content-Disposition”中检索文件名。值为'Content-Disposition': 'attachment; filename="20200213-bunbury-r02.csv"',

那么下面的修改如何?请认为这只是几个可能的答案之一。

修改后的脚本:

修改脚本后,请进行以下修改。

从:
var csvContent = UrlFetchApp.fetch(csvUrl).getContentText();
var csvData = Utilities.parseCsv(csvContent);
var csvFileName =UrlFetchApp.fetch(csvUrl).getBlob().getName();
至:
var res = UrlFetchApp.fetch(csvUrl);
var csvContent = res.getContentText();
var csvData = Utilities.parseCsv(csvContent);
var csvFileName = res.getHeaders()["Content-Disposition"].match(/filename="(\w.+)"/)[1];
  • 您也可以使用var csvFileName = res.getHeaders()["Content-Disposition"].split("=")[1].replace(/"/g, "");

结果:

https://www.punters.com.au/form-guide/spreadsheet-987656的情况下,csvFileName20200213-bunbury-r02.csv

参考:

如果我误解了您的问题,而这不是您想要的方向,我深表歉意。