markdown 使用HTML表单将本地文件上传到Google云端硬盘而无需授权

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了markdown 使用HTML表单将本地文件上传到Google云端硬盘而无需授权相关的知识,希望对你有一定的参考价值。

# Uploading Local Files to Google Drive without Authorization using HTML Form

This is a sample script for uploading local file to Google Drive without the authorization using HTML form. A selected file in your local PC using HTML form is uploaded to Google Drive and saved to Google Drive.

When you use this, at first, please [deploy Web Apps](https://developers.google.com/apps-script/guides/web#deploying_a_script_as_a_web_app). The script is ``doPost()`` of following scripts.

## Script : Google Apps Script
~~~javascript
function doPost(e) {
  var data = Utilities.base64Decode(e.parameters.data);
  var blob = Utilities.newBlob(data, e.parameters.mimetype, e.parameters.filename);
  DriveApp.createFile(blob);
  return ContentService.createTextOutput("Done.")
}
~~~

### Flow :
- Retrieve data, filename and mimetype as ``e.parameters.data``, ``e.parameters.filename`` and ``e.parameters.mimetype``, respectively.
- Decode the data using ``Utilities.base64Decode()``.
- Create blob using ``Utilities.newBlob()``.
- Create the file in the root folder of Google Drive.

## Script : HTML
``https://script.google.com/macros/s/#####/exec`` is the URL obtained when the Web Apps was deployed. Please replace it to your Web Apps URL. You can open this HTML for the browser of your local PC.

~~~html
<!DOCTYPE html>
<html>

<head>
    <title>Sample script for uploading file to Google Drive without authorization</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.js"></script>
</head>

<body>
    <form action="https://script.google.com/macros/s/#####/exec" id="form" method="post">
        Upload a file
        <div id="data"></div>
        <input name="file" id="uploadfile" type="file">
        <input id="submit" type="submit">
    </form>
    <script>
    $('#uploadfile').on("change", function() {
        var file = this.files[0];
        var fr = new FileReader();
        fr.fileName = file.name;
        fr.onload = function(e) {
            e.target.result
            html = '<input type="hidden" name="data" value="' + e.target.result.replace(/^.*,/, '') + '" >';
            html += '<input type="hidden" name="mimetype" value="' + e.target.result.match(/^.*(?=;)/)[0] + '" >';
            html += '<input type="hidden" name="filename" value="' + e.target.fileName + '" >';
            $("#data").empty().append(html);
        }
        fr.readAsDataURL(file);
    });
    </script>
</body>

</html>
~~~

### Flow :
- Using ``FileReader()``, retrieve base64 encoded file, filename and mimetype.
- Add input with type="hidden" to ``#form`` as text data.
    - ``replace(/^.*,/, '')`` is used for removing a header of encoded data.
    - ``match(/^.*(?=;)/)[0]`` is used for retrieving mimetype of uploading file.
- When a submit button is clicked, the base64 data is sent to ``doPost()`` of GAS.

## Note :
- In order to use this, after the script is modified, please redeploy Web Apps as a new version. By this, the latest script is reflected to Web Apps.
- This sample script can upload one file. If you want to upload several files, please modify script.  ``var file = this.files[0];`` means the selected first file. When there are some files, it is ``files[1], files[2] ....``.

## Reference :
- For downloading files on Google Drive to local PC, I have already published [here](https://gist.github.com/tanaikech/c5b2811bce01cbcc26ffa357df496379).

以上是关于markdown 使用HTML表单将本地文件上传到Google云端硬盘而无需授权的主要内容,如果未能解决你的问题,请参考以下文章

PHP文件上传

python实现本地图片上传到服务区

markdown 将现有本地上传到远程

使用 HTML 表单、cURL 和 PHP 将文件上传到 Imageshack API

springboot文件上传到本地电脑,项目目录,保存到数据库

如何使用 PHP 从上传到本地主机的一个 html 文件重定向到磁盘上的另一个 html 文件?