2016-03-27 17 views
0

Şu anda e-tabloyu doldurmak ve bir google sürücüye birkaç dosya yüklemek için HTML hizmetiyle appscript kullanıyorum. Bu dosyalar, URL’lerin Google Drive’daki resim bağlantıları olmadığı resimlerdir. Resim bağlantıları yalnızca google sitelerindeki dosyalarda kullanılabilir. Bu yüzden, bir google siteleri dosya dolabı sayfasındaki bir klasöre yükleme yapmak için yükleme yapmasını gerektirmem gerekiyor. Yeniden bulduğum tüm bilgiler: google sitelere eklenen ekler ilgimi çekmediğim UI uygulamasını kullanıyor. HTML servisini kullanmak istiyorum. İşte tam fonksiyonel olan ne var:Google sitesine eki yüklemek için Google Appscript/HTML hizmetini kullanma

Sunucu .gs

var dropBoxId = "blablahbalh"; // Drive ID of 'dropbox' folder 
var logSheetId = "blahblahbalh"; // Drive ID of log spreadsheet 

function doGet(e) { 
    return HtmlService.createHtmlOutputFromFile('myForm.html'); 
} 

function uploadFiles(formObject) { 
    try { 
    // Create a file in Drive from the one provided in the form 
    var folder = DriveApp.getFolderById(dropBoxId); 
    var blob = formObject.myFile; 
    var blob2 = formObject.myFile2; 
    var file = folder.createFile(blob); 
    var file2 = folder.createFile(blob2); 
    file.setDescription("Uploaded by " + formObject.myName); 

    // Open the log and record the new file name, URL and name from form 
    var ss = SpreadsheetApp.openById(logSheetId); 
    var sheet = ss.getSheets()[0]; 
    sheet.appendRow([file.getName(), file.getUrl(), file2.getName(), 
    file2.getUrl(), formObject.myName, formObject.actor_unions, formObject.actor_email, formObject.actor_phone, formObject.actor_website]); 

// Return the new file Drive URL so it can be put in the web app output 
return file.getUrl(); 
} catch (error) { 
return error.toString(); 
    } 
} 

HTML üzerinde belirli bir klasöre ek iliştirmek için hiçbir yol yoktur

<form id="myForm"> 
<input type="text" name="myName" placeholder="Your full name..."/> 
    <input type="text" name="actor_unions" placeholder="Union affiliations..."/> 
<input type="text" name="actor_email" placeholder="email Address..."/> 
<input type="text" name="actor_phone" placeholder="phone number..."/> 
<input type="text" name="actor_website" placeholder="Website..."/> 
<input name="myFile" type="file" /> 
<input name="myFile2" type="file" /> 
<input type="button" value="Submit" 
    onclick="google.script.run 
     .withSuccessHandler(updateUrl) 
     .withFailureHandler(onFailure) 
     .uploadFiles(this.parentNode)" /> 
</form> 

    <div id="output"></div> 

    <script> 
    function updateUrl(url) { 
     var div = document.getElementById('output'); 
    div.innerHTML = '<a href="' + url + '">Upload successful!</a>'; 
    } 
    function onFailure(error) { 
    alert(error.message); 
    } 
</script> 

<style> 
input { display:block; margin: 20px; } 
</style> 
+1

Merhaba, hoş geldiniz. Sorunuzun daha görünür olmasını sağlamak için lütfen [değiştir] ve ilgili dil etiketlerini ekleyin (HTML ve bence Javascript). Teşekkür ederim! –

+0

Geri bildirim için teşekkürler. Sözlüğe en uygun etiketleri kullandım, çünkü dile özgü sözdizimi ve Google özel işlevleriyle daha fazla ilgisi var. –

+0

Sandy girişiniz için teşekkürler. Evet, ona baktım, başka bir kaynağın bağlantısı olan bir ek oluşturmak için bilgi gönderdiniz. Dosyaları yükleyebilmek için bir html formu kullanmalı ve yüklenen dosyaların URL'sini diğer bilgilerle birlikte bir e-tabloya yazmam gerekir. –

cevap

0

AppScript - SitesApp service'u kullanarak bir Google Sitesının Dosya Dolabı tipi sayfası, Dosya Dolabı klasörleriyle hiçbir şekilde çalışma yöntemlerini ortaya çıkarmaz.

sadece bir klasörde koymadan Belirli bir site sayfasına Ek olarak dosya yükleme ile Tamam ise

, o kod oldukça düz ileri: Bu yardımcı olur

function uploadFiles(formObject) { 
    try { 
    var blob = formObject.myFile; 
    var site = SitesApp.getSite("your-site-name-as-in-url"); 
    // if your site is under a Google Apps hosted domain, then instead use 
    // var site = SitesApp.getSite("your-domain", "your-site-name-as-in-url"); 
    var page = site.getChildByName("name-of-page-as-in-its-url"); 
    var attachment = page.addHostedAttachment(blob); 
    return attachment.getUrl(); 
    } 
    catch(error) { 
    return error.toString(); 
    } 
} 

Umut!

+0

Kodumla çalışmadı. Kodunu tek başına denedin. Yürütme dökümü: '[16-03-28 18: 43: 44: 775 EDT] Yürütme başlatılıyor [16-03-28 18: 43: 44: 841 EDT] SitesApp.getSite ([https: // site. google.com/a/nyu.edu/lttest4]) [0.059 saniye] [16-03-28 18: 43: 44: 843 EDT] Yürütme işlemi [0.061 saniye toplam çalışma süresi] 'kodu' –

+0

değiştirdiniz mi? Barındırılan bir Google Apps alan adında olduğunuz için kodumdaki yoruma göre var site'nin beyanı? Durumunuzda şu satır olmalıdır: "var site = SitesApp.getSite (" nyu.edu "," lttest4 ");' Ayrıca yazım hatası yazım hatası yaptınız mı? "Var sayfa" satırı yanlıştı; olmalıdır: 'var page = site.getChildByName ("sitenin adı-site-olarak-url"); ' – azawaza

+0

PS: kodunuz try/catch kullanıyor olduğundan, hiçbir hata olmayacak Execution Transcript'te görüntülenir - kendiniz kaydetmelisiniz. Hata mesajı ne yazıyordu? – azawaza

İlgili konular