【发布时间】:2020-06-16 06:27:17
【问题描述】:
更新:我创建了一个问题:https://issuetracker.google.com/issues/150675170
我的网络应用程序运行良好很长时间,但现在突然上传的 pdf 文件损坏了。下面是一个小型简化示例,可用于重现该问题。
查看上传的文件内容,貌似文件内容被当作文本处理,有几个字符被替换为EF BF BD,即'REPLACEMENT CHARACTER'的UTF-8字节序列(U+FFFD)。
例如,原始 PDF 文件的第一个字节:
25 50 44 46 2D 31 2E 34 0A 25 E2 E3 CF D3 0A 31 39 | %PDF-1.4\n%âãÏÓ\n19
它被上传为:
25 50 44 46 2D 31 2E 34 0A 25 EF BF BD EF BF BD EF BF BD EF BF BD 0A 31 39 | %PDF-1.4\n%����\n19
我不确定在哪里报告,我只希望 Google 员工会看到并修复它。
与此同时,也许熟悉 Google Apps 脚本的人有一个解决方法的想法。
下面是一个简化的小例子 - 部署,上传一个二进制文件,转到 Drive,在“test”文件夹下找到它,下载它,观察它是否损坏。
HTML模板,文件名test_form.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<form id="test-form">
<input type="file" id="test-file" name="test-file">
<button id="submit-button" type="submit">Upload</button>
</form>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
(function () {
'use strict';
$('#test-form').submit(function (e) {
e.preventDefault(); // prevent form from submitting
google.script.run
.withFailureHandler(fileUploadedFailure)
.withSuccessHandler(fileUploaded)
.uploadFilesFrame(this);
});
function fileUploaded(status) {
alert(status);
}
function fileUploadedFailure(error) {
alert('Failed: ' + error.message);
}
})();
</script>
</body>
</html>
服务器代码,文件名Code.gs:
var rootFolderName = "test";
function doGet(e) {
var template = HtmlService.createTemplateFromFile('test_form');
return template.evaluate().setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
}
function uploadFilesFrame(form) {
try {
var fileBlob = form['test-file'];
var rootFolder = DriveApp.getFoldersByName(rootFolderName);
if (rootFolder.hasNext()) {
rootFolder = rootFolder.next();
} else {
rootFolder = DriveApp.createFolder(rootFolderName);
}
var file = rootFolder.createFile(fileBlob);
return JSON.stringify({"status": 'ok', "msg": file.getId()});
} catch (error) {
return JSON.stringify({"status": 'error', "data": error.stack});
}
}
【问题讨论】:
-
您可以在 issuetracker 中报告。有关详细信息,请参阅tag info page。
-
谢谢,创建了一个问题:issuetracker.google.com/issues/150675170
-
请将其添加到您的问题或答案中。
标签: google-apps-script file-upload web-applications