דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. העלאת קבצים גדולים לגוגל דרייב API

העלאת קבצים גדולים לגוגל דרייב API

מתוזמן נעוץ נעול הועבר תכנות
5 פוסטים 2 כותבים 269 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • אבייא מנותק
    אבייא מנותק
    אביי
    כתב ב נערך לאחרונה על ידי
    #1

    אני משתמש כיום בפונקציה הזו כדי להעלות קבצים לגוגל דרייב,

    DriveApp.getFolderById(folder).createFile(file);
    

    הבעיה שהוא מעלה קבצים רק עד גודל של 50 MB.

    איך אפשר להעלות גם קבצים גדולים יותר באמצעות הAPI?

    ניתן ליצור עימי קשר 8140hp+t@gmail.com | קטלוג מוצרים
    הלינקיה שלי https://abaye.co/link.html

    צדיק תמיםצ תגובה 1 תגובה אחרונה
    0
    • צדיק תמיםצ מנותק
      צדיק תמיםצ מנותק
      צדיק תמים
      השיב לאביי ב נערך לאחרונה על ידי צדיק תמים
      #2

      @אביי זה חייב להיות דרך גוגל סקריפט? כי שם יש ככל הנראה מגבלת גודל כללית לבקשה יוצאת של 50MB.
      אתה יכול להעלות דרך הAPI שלהם בnode.js, אני השתמשתי בעבר במדריך המעולה והברור הזה:
      https://www.section.io/engineering-education/google-drive-api-nodejs
      רק שים לב שבדרך ששם (הנפקת אישורים דרך הoauthplayground) האסימון רענון פוקע אחרי 7 ימים. אבל זה מסביר מצויין את שאר החלקים, וגם אתה יכול להתחיל ככה ובהמשך לעבור לאימות רגיל.

      Don’t comment bad code — rewrite it." — Brian W. Kernighan and P. J. Plaugher"
      טיפים

      אבייא תגובה 1 תגובה אחרונה
      2
      • אבייא מנותק
        אבייא מנותק
        אביי
        השיב לצדיק תמים ב נערך לאחרונה על ידי
        #3

        @צדיק-תמים אמר בהעלאת קבצים גדולים לגוגל דרייב API:

        @אביי זה חייב להיות דרך גוגל סקריפט?

        די. אני יכול כמובן להעביר את זה לפלטפורמה אחרת, אבל זה מה שהכי התאים לי, בגלל שזה מתממשק ישר עם היישומים של גוגל וורקספייס.

        ניתן ליצור עימי קשר 8140hp+t@gmail.com | קטלוג מוצרים
        הלינקיה שלי https://abaye.co/link.html

        צדיק תמיםצ תגובה 1 תגובה אחרונה
        0
        • צדיק תמיםצ מנותק
          צדיק תמיםצ מנותק
          צדיק תמים
          השיב לאביי ב נערך לאחרונה על ידי צדיק תמים
          #4

          @אביי מצאתי עכשיו ריפו שאמור לפתור בדיוק את הבעיה הזאת, תנסה לבדוק אותו
          https://github.com/tanaikech/Resumable_Upload_For_WebApps

          Don’t comment bad code — rewrite it." — Brian W. Kernighan and P. J. Plaugher"
          טיפים

          אבייא תגובה 1 תגובה אחרונה
          1
          • אבייא מנותק
            אבייא מנותק
            אביי
            השיב לצדיק תמים ב נערך לאחרונה על ידי אביי
            #5

            @צדיק-תמים אמר בהעלאת קבצים גדולים לגוגל דרייב API:

            @אביי מצאתי עכשיו ריפו שאמור לפתור בדיוק את הבעיה הזאת, תנסה לבדוק אותו
            https://github.com/tanaikech/Resumable_Upload_For_WebApps

            כיצד אני משתמש בזה כספרייה?
            סורי, אני ממש בור בקטע הזה...
            הריפו ש @צדיק-תמים הביא באמת עושה את העבודה, אבל הוא משרשר את הקובץ (והקוד) ע"י בחירת קובץ מהמחשב בדף html, אבל במקרה שלי מדובר בקבצי גוגל שיטס, שאני מקבל אותם לblub, אשמח אם מישהו יוכל להסביר לי איך להתאים את הריפו.

            זה הgs שמבצע את ההעלאה לאחר בחירת הקובץ

            <script>
                const chunkSize = 5242880;
            
                $('#uploadfile').on("change", function() {
                    var file = this.files[0];
                    if (file.name != "") {
                        var fr = new FileReader();
                        fr.fileName = file.name;
                        fr.fileSize = file.size;
                        fr.fileType = file.type;
                        fr.onload = init;
                        fr.readAsArrayBuffer(file);
                    }
                });
            
                function init() {
                    $("#progress").text("בהעלאה...");
                    var fileName = this.fileName;
                    var fileSize = this.fileSize;
                    var fileType = this.fileType;
                    console.log({fileName: fileName, fileSize: fileSize, fileType: fileType});
                    var buf = this.result;
                    var chunkpot = getChunkpot(chunkSize, fileSize);
                    var uint8Array = new Uint8Array(buf);
                    var chunks = chunkpot.chunks.map(function(e) {
                        return {
                            data: uint8Array.slice(e.startByte, e.endByte + 1),
                            length: e.numByte,
                            range: "bytes " + e.startByte + "-" + e.endByte + "/" + chunkpot.total,
                        };
                    });
                    google.script.run.withSuccessHandler(function(at) {
                        var xhr = new XMLHttpRequest();
                        xhr.open("POST", "https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable");
                        xhr.setRequestHeader('Authorization', "Bearer " + at);
                        xhr.setRequestHeader('Content-Type', "application/json");
                        xhr.send(JSON.stringify({
                            mimeType: fileType,
                            name: fileName,
                        }));
                        xhr.onload = function() {
                            doUpload({
                                location: xhr.getResponseHeader("location"),
                                chunks: chunks,
                            });
                        };
                        xhr.onerror = function() {
                            console.log(xhr.response);
                        };
                    }).getAt();
                }
            
                function doUpload(e) {
                    var chunks = e.chunks;
                    var location = e.location;
                    var cnt = 0;
                    var end = chunks.length;
                    var temp = function callback(cnt) {
                        var e = chunks[cnt];
                        var xhr = new XMLHttpRequest();
                        xhr.open("PUT", location, true);
                        xhr.setRequestHeader('Content-Range', e.range);
                        xhr.send(e.data);
                        xhr.onloadend = function() {
                            var status = xhr.status;
                            cnt += 1;
                            console.log("Uploading: " + status + " (" + cnt + " / " + end + ")");
                            $("#progress").text("Uploading: " + Math.floor(100 * cnt / end) + "%");
                            if (status == 308) {
                                callback(cnt);
                            } else if (status == 200) {
                                $("#progress").text("Done.");
                            } else {
                                $("#progress").text("Error: " + xhr.response);
                            }
                        };
                    }(cnt);
                }
            
                function getChunkpot(chunkSize, fileSize) {
                    var chunkPot = {};
                    chunkPot.total = fileSize;
                    chunkPot.chunks = [];
                    if (fileSize > chunkSize) {
                        var numE = chunkSize;
                        var endS = function(f, n) {
                            var c = f % n;
                            if (c == 0) {
                                return 0;
                            } else {
                                return c;
                            }
                        }(fileSize, numE);
                        var repeat = Math.floor(fileSize / numE);
                        for (var i = 0; i <= repeat; i++) {
                            var startAddress = i * numE;
                            var c = {};
                            c.startByte = startAddress;
                            if (i < repeat) {
                                c.endByte = startAddress + numE - 1;
                                c.numByte = numE;
                                chunkPot.chunks.push(c);
                            } else if (i == repeat && endS > 0) {
                                c.endByte = startAddress + endS - 1;
                                c.numByte = endS;
                                chunkPot.chunks.push(c);
                            }
                        }
                    } else {
                        var chunk = {
                            startByte: 0,
                            endByte: fileSize - 1,
                            numByte: fileSize,
                        };
                        chunkPot.chunks.push(chunk);
                    }
                    return chunkPot;
                }
            </script>
            

            ניתן ליצור עימי קשר 8140hp+t@gmail.com | קטלוג מוצרים
            הלינקיה שלי https://abaye.co/link.html

            תגובה 1 תגובה אחרונה
            0

            בא תתחבר לדף היומי!
            • התחברות

            • אין לך חשבון עדיין? הרשמה

            • התחברו או הירשמו כדי לחפש.
            • פוסט ראשון
              פוסט אחרון
            0
            • דף הבית
            • קטגוריות
            • פוסטים אחרונים
            • משתמשים
            • חיפוש
            • חוקי הפורום