【问题标题】:Create new Doc in Google drive after processing uploaded text file处理上传的文本文件后在谷歌驱动器中创建新文档
【发布时间】:2013-09-10 04:16:27
【问题描述】:

我成功地将一个文本文件上传到 google Drive,并且我已经编写了一个方法,可以成功地将文本翻译成猪拉丁语。现在我正在尝试在 Google Drive 中创建一个新文档来输出翻译后的文本。但是我总是收到消息:“发生错误”,当我检查我的云端硬盘时,我只有原始上传的文本。

这是我的代码:

function doGet(e) {

 var app = UiApp.createApplication().setTitle("Upload");
   var formContent = app.createVerticalPanel();
   formContent.add(app.createFileUpload().setName('thefile'));
   formContent.add(app.createSubmitButton('submit'));
   var form = app.createFormPanel();
   form.add(formContent);
   app.add(form);
   return app;
 }

function doPost(e) {
   // data returned is a blob for FileUpload widget
   var fileBlob = e.parameter.thefile;
   var doc = DocsList.createFile(fileBlob);

   var app = UiApp.getActiveApplication();
   //Display a confirmation message
   var label = app.createLabel('file uploaded successfully');
   app.add(label);
   return app;

  var text = doc.getDataAsString();
  Logger.log('I uploaded and my text is: ' + text);

  MakeTranslationDoc(text);
 }

function MakeTranslationDoc(passedText) 
{ 

  // Create a new Report 
  var newdoc = DocumentApp.create('Pig Latin Translation');

  newdoc.appendParagraph(ParseText(passedText));

  // Save and close the document
  newdoc.saveAndClose();
}

function ParseText(myText) 
{  
  ...convert text to piglatin...
  return results;
}

如何从上传的文本成功创建新文档?

【问题讨论】:

    标签: javascript google-apps-script runtime-error google-apps


    【解决方案1】:

    有时间再看一遍:(它有点小技巧,但应该可以工作

    这里是 API 控制台 HELP PAGE,您应该创建一个项目,该项目需要您使用您的 google 凭据登录。如果这是您第一次登录 API,您将获得一个大按钮来创建您的第一个项目。然后,您应该获取 Web 应用程序客户端的凭据。当您单击 API 访问链接时会找到 CONSUMER_KEY 和 CONSUMER_SECRET,它们被称为“客户端 ID”和“客户端密码”。

    • 请务必选择 Drive API 服务。

    创建项目后,控制台将显示,单击服务(右侧链接),向下滚动并单击 Drive API 切换开关以启用它。

    • 使用上传文件的 ID,您可以使用 urlFetch 下载其内容

    你刚刚上传的文件作为一个ID你可以使用docID = doc.getId()得到它

    • 您需要授权 OAuth 流程

    基本上在您第一次运行脚本时,它会经过授权流程,这将使您的应用程序能够访问您的驱动器资源,因为您可能会看到应用程序选择的范围是只读的“www.googleapis.com /auth/drive.readonly" 你可以了解更多关于 Drive API HERE

    • 我已在电子表格中完成此操作以查看 Logger 语句,您当然可以将其移植到非电子表格绑定脚本。

    电子表格开发提供了更好的调试功能,之后我们可以将代码移植到独立脚本中。不同之处在于,要显示 UI,您需要调用活动电子表格并在其上调用 .show(app) ...有关此信息的信息:https://developers.google.com/apps-script/uiapp#DisplayingSpreadsheet

    代码:

    function getFileContent(docId) {
    
        //set up oauth for Google Drive Settings
    
        var oAuthConfig1 = UrlFetchApp.addOAuthService("googleDrive2");
        oAuthConfig1.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope=https://www.googleapis.com/auth/drive.readonly");
        oAuthConfig1.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken");
        oAuthConfig1.setAuthorizationUrl("https://www.google.com/accounts/OAuthAuthorizeToken?oauth_callback=https://script.google.com/a/macros");
        oAuthConfig1.setConsumerKey(CONSUMER_KEY);
        oAuthConfig1.setConsumerSecret(CONSUMER_SECRET);
    
        var options1 = {oAuthServiceName:"googleDrive2", oAuthUseToken:"always", method:"GET", headers:{"GData-Version":"3.0"}, contentType:"application/x-www-form-urlencoded"};
    
        //set up drive file url
        var theUrl = "https://www.googleapis.com/drive/v2/files/" + docId;
    
        //urlFetch for drive metadat info
        var fileMetadata = "";
        try {
            var response = UrlFetchApp.fetch(theUrl,options1);
            fileMetadata = response.getContentText();
        } catch(problem) {
            Logger.log(problem.message);  
        }
    
        // find the download Url
        var fileDownloadUrl = Utilities.jsonParse(fileMetadata).downloadUrl;
        Logger.log(fileDownloadUrl)
    
        var fileContent = "";
        try {
            var response = UrlFetchApp.fetch(fileDownloadUrl,options1);
    
            fileContent = response.getContentText();
        } catch(problem) {
            Logger.log(problem.message);
        }
        Logger.log(fileContent);
    }
    

    让我知道它是如何工作的。

    【讨论】:

    • 恐怕我对这方面太陌生,无法理解前几条指令,您可以指出我的任何资源吗?或者我可以让你花时间带我完成它。
    • 是的,当然,我很乐意引导您完成它,请查看编辑。
    【解决方案2】:

    这些天要做的第一件事是迁移到比 DocList 更新的 DriveApp。

    失败的函数是 doc.getDataAsString() 已被 doc.getAs(mimeType) 替换。

    这两个更改,并将文档 ID 传递给下一个函数(失去耦合?)您的代码将开始工作

    function doGet(e) {
    
     var app = UiApp.createApplication().setTitle("Upload");
       var formContent = app.createVerticalPanel();
       formContent.add(app.createFileUpload().setName('thefile'));
       formContent.add(app.createSubmitButton('submit'));
       var form = app.createFormPanel();
       form.add(formContent);
       app.add(form);
       return app;
     }
    
    function doPost(e) {
       // data returned is a blob for FileUpload widget
       var fileBlob = e.parameter.thefile;
       var doc = DriveApp.createFile(fileBlob);
    
       var app = UiApp.getActiveApplication();
       //Display a confirmation message
       var label = app.createLabel('file uploaded successfully');
       app.add(label);
    
      docID = doc.getId()
      MakeTranslationDoc(docID);
    
      return app;
     }
    
    function MakeTranslationDoc(docID) 
    {
    
      var uploadedDoc =  DriveApp.getFileById(docID);
      var text = uploadedDoc.getAs(uploadedDoc.getMimeType());
    
      // Create a new Report 
      var newdoc = DocumentApp.create('Pig Latin Translation');
    
      newdoc.appendParagraph(ParseText(text));
    
      // Save and close the document
      newdoc.saveAndClose();
    }
    
    function ParseText(myText) 
    {  
    //  ...convert text to piglatin...
      return myText;
    }
    

    重要的是不要假设您知道 MimeType 并从文档本身获取它。

    如果您遇到任何问题,请告诉我。

    【讨论】:

    • 恐怕你的代码不适合我。这是您自己测试的网址。我复制了除 parseText 之外的所有代码。 script.google.com/macros/s/…
    • 你有 gmail 我可以分享脚本吗?这样你就可以看到并用真实的东西进行测试?
    • 我说得很快,确实内容不是以文本形式返回的,只是 Blob 这个词……这里列出了一些讨论和一些解决方案,这些解决方案是针对使用 urlfetch 下载文档内容的刚上传。对虚假的希望感到抱歉。 code.google.com/p/google-apps-script-issues/issues/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 2017-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    相关资源
    最近更新 更多