2014-12-28 4 views
1

Вкратце я пытаюсь хранить документы PDF в синтаксическом анализе. По сути, как это работает, пользователь выбирает загруженный файл с диска Google и из выбранного документа, который я хочу сохранить в Parse.Загрузить файл к Parse (Javascript)

Я смог создать URL-адрес для pdf-документа, выбранного с диска, и хотел бы использовать этот URL для хранения в Parse.

Ниже приведен код, который позволяет пользователю выбрать PDF-документ с диска Google и где для этого элемента создается уникальный 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 в Parse, чтобы иметь возможность восстановить этот файл позже.

Примечание:

Ниже приведен код, который я нашел, что позволяет пользователю загрузить файл в разбора. Проблема: я не хочу, чтобы файл поступал с пользовательского компьютера (файл загрузки пользователя с использованием ввода файла), но из URL-адреса, предоставленного приводом Google.

<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-адрес нашего собственного сервера и обработать загрузку там. В нашем конкретном случае мы использовали cURL с PHP/Codeignitor, схватили файл и затем загрузили его на S3 (но то же самое можно было легко сделать для загрузки Parse).

Мы рассмотрели использование CloudCode с помощью httpRequest, но проблема в том, что время ожидания выполнения. Parse только дает короткое время каждой функции CloudCode, и файл никогда не закончил бы загрузку до того, как мы закончим.

+0

В том смысле, что если для одновременного отправки 10 URL-адресов PDF-документа для синтаксического анализа у меня будет возможность получить тайм-аут? Я заметил, что Parse недавно добавил новый класс для файла Parse.file, у вас был какой-то опыт в этом - https://parse.com/docs/js_guide#files-classes? – jon220

+0

Я не уверен, что я сразу понял ваш вопрос относительно 10 документов PDF. Вы одновременно загружаете 10 Parse.Object, поэтому сохранение 10 URL-адресов одновременно не будет проблемой. Что касается Parse.File, он существует уже довольно долгое время, но вам нужно отправить строковое представление данных Base64 ... что означает, что вам нужно сначала загрузить PDF-код из URL-адреса и преобразовать его. Вам действительно нужно сделать это на стороне сервера. –

Смежные вопросы