You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Classroom作业附件格式错误:HTML替代JPG/PDF问题求助

问题分析与解决方案

核心问题

你的代码在上传文件到Drive时,文件被识别为HTML的原因主要有以下几点:

  1. 直接使用response.getBlob()时,Blob的MIME类型未被正确覆盖,若服务器返回的Content-Type为text/html,文件就会被误识别
  2. 固定文件名"evidence"缺少对应扩展名,Google Drive无法通过后缀辅助判断文件类型
  3. 目标URL可能存在重定向,导致实际获取到的是HTML跳转页面而非真实的图片/PDF

修复后的代码

function uploadFileToDrive(url) {
  // 发起请求时强制跟随重定向,确保获取真实文件内容
  var response = UrlFetchApp.fetch(url, {
    headers: {
      Authorization: 'Bearer ' + ScriptApp.getOAuthToken()
    },
    followRedirects: true,
    muteHttpExceptions: true // 捕获异常,方便排查返回内容
  });

  // 检查HTTP状态码,确认请求成功
  if (response.getResponseCode() !== 200) {
    throw new Error(`请求失败,状态码:${response.getResponseCode()},返回内容:${response.getContentText()}`);
  }

  var fileExtension = url.substring(url.lastIndexOf('.') + 1).toLowerCase();
  var mimeType;
  
  switch (fileExtension) {
    case 'jpg':
    case 'jpeg':
      mimeType = 'image/jpeg'; // 标准MIME类型为image/jpeg,而非image/jpg
      break;
    case 'pdf':
      mimeType = 'application/pdf';
      break;
    default:
      // 扩展名匹配失败时,优先用响应头的MIME类型,兜底用二进制流
      mimeType = response.getHeaders()['Content-Type'] || 'application/octet-stream';
      break;
  }

  // 显式设置Blob的MIME类型,并给文件名添加对应扩展名
  var blob = response.getBlob().setContentType(mimeType).setName(`evidence.${fileExtension}`);
  
  var file = Drive.Files.insert({
    title: blob.getName(),
    mimeType: mimeType
  }, blob);
  
  return file.id;
}

关键改动说明

  • 添加followRedirects: true:自动跟随URL重定向,避免获取到跳转后的HTML页面
  • 增加状态码检查和异常捕获:快速定位请求失败原因(比如是否是登录验证页、404错误)
  • 修正JPG的MIME类型:使用标准的image/jpeg类型,确保系统/服务能正确识别
  • 文件名添加扩展名:通过evidence.${fileExtension}让Drive能通过后缀辅助判断文件类型
  • 显式设置Blob的MIME类型:强制覆盖Blob的默认类型,避免沿用响应头的错误类型

额外排查步骤

  1. 验证URL有效性:直接在浏览器打开目标URL,确认返回的是图片/PDF而非HTML页面
  2. 检查OAuth权限:确保脚本已获得https://www.googleapis.com/auth/drive.file和https://www.googleapis.com/auth/script.external_request权限
  3. 添加调试日志:在代码中加入Logger.log(response.getHeaders()['Content-Type']),确认响应头返回的MIME类型是否正确

内容的提问来源于stack exchange,提问作者grantc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 22:33:31