2014-12-28 8 views
1

간단히 요약하면 pdf 문서를 구문 분석에 저장하려고합니다. 본질적으로 그것이 작동하는 방법, 사용자가 Google 드라이브에서 업로드 된 파일을 선택하고 선택한 문서에서 Parse에 저장하려고합니다.파일을 구문 분석 (자바 스크립트)

드라이브에서 선택한 PDF 문서의 URL을 생성 할 수 있었으며 해당 URL을 사용하여 Parse에 저장하려고합니다.

아래는 사용자가 Google 드라이브에서 PDF 문서를 선택할 수 있도록 허용하고 해당 항목에 대해 고유 한 URL이 생성되는 코드입니다.

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/> 
    <title>eSnail Scan Upload Part 2</title> 

    <script type="text/javascript"> 

     // The Browser API key obtained from the Google Developers Console. 
     var developerKey = 'xxxxxxxxxx'; 

     // The Client ID obtained from the Google Developers Console. 
     var clientId = 'xxxxxxxxxxxxx'; 

     // Scope to use to access user's photos. 
     var scope = ['https://www.googleapis.com/auth/photos']; 

     var pickerApiLoaded = false; 
     var oauthToken; 

     // Use the API Loader script to load google.picker and gapi.auth. 
     function onApiLoad() { 
     gapi.load('auth', {'callback': onAuthApiLoad}); 
     gapi.load('picker', {'callback': onPickerApiLoad}); 
     } 

     function onAuthApiLoad() { 
     window.gapi.auth.authorize(
      { 
       'client_id': clientId, 
       'scope': scope, 
       'immediate': false 
      }, 
      handleAuthResult); 
     } 

     function onPickerApiLoad() { 
     pickerApiLoaded = true; 
     createPicker(); 
     } 

     function handleAuthResult(authResult) { 
     if (authResult && !authResult.error) { 
      oauthToken = authResult.access_token; 
      createPicker(); 
     } 
     } 

     // Create and render a Picker object for picking user Photos. 
     function createPicker() { 
     if (pickerApiLoaded && oauthToken) { 
      var picker = new google.picker.PickerBuilder(). 
       enableFeature(google.picker.Feature.MULTISELECT_ENABLED). 
       addView(google.picker.ViewId.PDFS). 
       setOAuthToken(oauthToken). 
       setDeveloperKey(developerKey). 
       setCallback(pickerCallback). 
       build(); 
      picker.setVisible(true); 
     } 
     } 

     // A simple callback implementation. 
     function pickerCallback(data) { 
     var url = 'nothing'; 
     if (data[google.picker.Response.ACTION] == google.picker.Action.PICKED) { 
      var doc = data[google.picker.Response.DOCUMENTS][0]; 
      url = doc[google.picker.Document.URL]; 
     } 
     var message = 'The following(s) were stored in Parse: ' + url; 
     document.getElementById('result').innerHTML = message; 
     } 
    </script> 
    </head> 
    <body> 
    <div id="result"></div> 

    <!-- The Google API Loader script. --> 
    <script type="text/javascript" src="https://apis.google.com/js/api.js?onload=onApiLoad"></script> 
    </body> 
</html> 

는 기본적으로 나는 파일의 URL을 가지고 있고, 나중에 그 파일을 검색 할 수 있도록 구문 분석에 해당 URL을 저장하고 싶습니다.

참고 : 아래

내가 그 사용자가 구문 분석에 파일을 업로드 할 수 있습니다 볼 수있는 코드입니다. 문제는 내가 파일을 사용자 컴퓨터 (파일 입력을 사용하여 파일을 업로드)에서 오는 것이 아니라 Google 드라이브에서 제공 한 URL에서 가져 오는 것입니다.

<HTML> 
<head> 
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 
</head> 

<body> 
<form id="fileupload" name="fileupload" enctype="multipart/form-data" method="post"> 
    <fieldset> 
    <input type="file" name="fileselect" id="fileselect"></input> 
    <input id="uploadbutton" type="button" value="Upload to Parse"/> 
    </fieldset> 
</form> 

<script type="text/javascript"> 
    $(function() { 
    var file; 

    // Set an event listener on the Choose File field. 
    $('#fileselect').bind("change", function(e) { 
     var files = e.target.files || e.dataTransfer.files; 
     // Our file var now holds the selected file 
     file = files[0]; 
    }); 

    // This function is called when the user clicks on Upload to Parse. It will create the REST API request to upload this image to Parse. 
    $('#uploadbutton').click(function() { 
     var serverUrl = 'https://api.parse.com/1/files/' + file.name; 

     $.ajax({ 
     type: "POST", 
     beforeSend: function(request) { 
      request.setRequestHeader("X-Parse-Application-Id", 'pWG7YizRnwxRjplGT9RSLoHtFItDtvmc2EK0YJAe'); 
      request.setRequestHeader("X-Parse-REST-API-Key", '2LsfIAg5Np9u09ScVIT5StEcO0LXMfpzndWOiwHX'); 
      request.setRequestHeader("Content-Type", file.type); 
     }, 
     url: serverUrl, 
     data: file, 
     processData: false, 
     contentType: false, 
     success: function(data) { 
      prompt("File available at: ", data.url); 
     }, 
     error: function(data) { 
      var obj = jQuery.parseJSON(data); 
      prompt(obj.error); 
     } 
     }); 
    }); 


    }); 
</script> 


</head> 
</body> 
</HTML> 

어떤 도움이나 제안이라도 대단히 감사하겠습니다. 미리 감사드립니다.

답변

0

우리 고객의 프로젝트 중 하나에 대해 똑같은 문제가있었습니다. 우리는 여러 가지 방법을 살펴 보았고 가장 좋은 방법은 URL을 우리 서버에 전달하고 거기에서 업로드를 처리하는 것이라고 결정했습니다. 특정 사례에서는 PHP/Codeignitor에서 cURL을 사용하여 파일을 가져온 다음 S3에 업로드했습니다 (그러나 Parse 업로드의 경우에도 동일하게 수행 할 수 있음).

우리는 httpRequest와 함께 CloudCode를 사용하여 조사했지만 문제는 실행 시간 초과입니다. Parse는 각 CloudCode 함수에 짧은 시간 만 제공하며 파일이 시간 초과되기 전에 다운로드를 완료하지 못했습니다.

+0

10 개의 PDF 문서 URL을 동시에 구문 분석하기 위해 전송하는 경우 시간 제한이 발생할 가능성이 있습니까? Parse가 최근에 Parse.file 파일에 새 클래스를 추가했음을 알았습니다. https://parse.com/docs/js_guide#files-classes에 대한 경험이 있습니까? – jon220

+0

한 번에 10 개의 PDF 문서가 전송된다는 질문에 대해 잘 모르겠습니다. 10 개의 Parse.Objects를 동시에 업로드하므로 동시에 10 개의 URL을 저장해도 문제가되지 않습니다. Parse.File에 대해서는 꽤 오랜 시간이 걸렸지 만 데이터의 Base64 문자열 표현을 보내야합니다. 즉, URL에서 PDF를 먼저 다운로드하여 변환해야한다는 의미입니다. 정말이 서버 쪽을해야합니다. –

관련 문제