시작시 사용자에게 HTML 페이지를 제공하는 Google Apps Script로 작업하고 있습니다. PDF 및 다양한 형식의 이미지를 업로드 할 수 있도록 웹 페이지에 파일 입력 필드를 포함 시켰습니다. 그런 다음 업로드 된 파일을 google.script.run.을 실행하여 Google 스크립트로 반환 한 다음 함수 내에서 파일을 Blob로 Google Cloud SQL 데이터베이스에 저장하고 싶습니다. 이 문제에 대한JDBC 라이브러리를 사용하여 Blob을 Google Cloud SQL에 저장하는 방법
function storeFile(f) {
var conn = Jdbc.getConnection(dbUrl, user, userPwd);
var stmt = conn.createStatement(Jdbc.ResultSet.TYPE_SCROLL_INSENSITIVE, Jdbc.ResultSet.CONCUR_UPDATABLE);
var results = stmt.executeQuery('select * from my_table');
results.moveToInsertRow();
var newBlob = conn.createBlob();
var uBlob = Utilities.newBlob(f, 'application/pdf');
newBlob.setBytes(1, uBlob.getBytes());
results.updateBlob('file', newBlob);
results.insertRow();
results.moveToCurrentRow();
results.close();
stmt.close();
}
그래서 지금 :
HTML :
<input type="file" id="cert">
<input type="button" id="btnCheck" onclick="readFiles()" value="Read Files">
자바 스크립트 :
function readFiles() {
var x = document.getElementById("cert");
if ('files' in x) {
if (x.files.length != 0) {
for (var i = 0, f; f = x.files[i]; i++) {
var reader = new FileReader();
// Closure to capture the file information.
reader.onload = (function(theFile) {
return function(e) {
google.script.run.storeFile(e.target.result);
};
})(f);
reader.readAsBinaryString(f);
}
}
}
}
구글 스크립트 여기
는 지금까지 내 코드의 약간의 손에. 이 시점에서 데이터는 데이터베이스에 저장되어 있지만 많은 추가 정보가 추가 된 것으로 보이며 MySQL Workbench를 사용하여 데이터를 파일로 내보낼 때 (이 경우 PDF로 테스트 중입니다) 파일을 저장할 수 없습니다 열렸다.MySQL Workbench를 사용하여 수동으로 파일을 데이터베이스에 삽입하면 데이터의 크기가 정확하고 내보내지고 올바르게 열립니다. 나는 uBlob.getBytes()의 크기를 출력하면 값이 754244이고 uBlob.getDataAsString()의 크기를 출력하면 값은 528004이다. 원래 파일 크기는 516kB (~ 528384)이다. 원시 데이터를 살펴보면 분명히 유사점이 있습니다. 아래에서 확인하십시오.
MySQL의 워크 벤치 (먼저 20 라인)을 사용하여 저장하는 경우 :
%PDF-1.3 %âãÏÓ 1 0 obj > endobj 2 0 obj > stream ÿØÿà JFIF ,, ÿÛ
Google 애플리케이션 스크립트 (먼저 20 개 라인)를 사용하여 저장하는 경우 : 내가 보낼 수있는 제한된 해요
%PDF-1.3 %âãÃà 1 0 obj > endobj 2 0 obj > stream ÿÃÿà JFIF ,, ÿà Â
을 내 Google Script 함수에 전달했지만 Binary String은 합법적으로 보입니다. newBlob은 JdbcBlob이며 setBytes 함수를 사용하여 BlobSource 유형의 두 번째 매개 변수로 설정합니다. 따라서 BlobSource로 Utilities.newBlob를 사용하여 Blob을 작성하여 웹 페이지의 Binary String 파일을 입력으로 사용합니다. results.updateBlob에는 JdbcBlob 유형의 두 번째 매개 변수가 있으므로 newBlob을 입력으로 제공합니다.
나는이 시점에서 난처한 데 도움이 될 것입니다. 감사!
또 다른 방법은, 드라이브에 저장 한 후 바로 SQL에서 파일 ID를 저장하는 것입니다. –
파일은 여러 사용자가 업로드 할 수 있으며 매우 많아 질 수 있으므로 여러 가지 이유로 데이터베이스 저장소에 보관하는 것이 좋습니다.1) 내 개인 드라이브 할당량에 포함되지 않습니다. 2) 파일이 상대적으로 체계적으로 유지됩니다. 3) 시스템이 Google 도메인 외부로 이동해야하는 경우 데이터베이스를 백업하고 손실없이 다른 서버로 이동할 수 있습니다. 데이터 무결성. 그래도 좋은 아이디어, 고마워! – engnfrc
드라이브에 저장하고 동일한 문제가 발생하면 –