2016-03-23 2 views
3

Я пытаюсь загрузить файл в формате pdf с диска Google на сервер s3, но он не загружен должным образом.Google pdf-файл не загружен должным образом на сервер s3

Я использую привод подборщика Google для получения файла Вот мой

Вот мой Google код диск выбора: - (клиент сторона код)

<script type="text/javascript" src="https://apis.google.com/js/api.js"></script> 
    // The Browser API key obtained from the Google Developers Console. 
     // Replace with your own Browser API key, or your own key. 
     var developerKey = 'XXXXXXXXXX_ff_NX66eb-XXXXXXXXXXX'; 

     // The Client ID obtained from the Google Developers Console. Replace with your own Client ID. 
     var clientId = "XXXXXXXXXX-hs4ujaro5sc3d0g8qndtcq2tl279cfm1.apps.googleusercontent.com" 

     // Replace with your own App ID. (Its the first number in your Client ID) 
     var appId = "XXXXXXXXXX"; 
     // Scope to use to access user's Drive items. 
     var scope = ['https://www.googleapis.com/auth/drive']; 

     var pickerApiLoaded = false; 
     var oauthToken; 

       $scope.addGoogleDriveFile = function() { 
       if (!isValidSelectedCategories(getSelectedCategories())) { 
        return; 
       } 
       if (!isValidSelectedCategoriesNoapost(getSelectedCategories())) { 
        return; 
       } 

       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 searching images. 
        function createPicker() { 
         if (pickerApiLoaded && oauthToken) { 
         var view = new google.picker.View(google.picker.ViewId.DOCS); 
         var picker = new google.picker.PickerBuilder() 
          .enableFeature(google.picker.Feature.NAV_HIDDEN) 
          .setAppId(appId) 
          .setOAuthToken(oauthToken) 
          .addView(view) 
          .addView(new google.picker.DocsUploadView()) 
          .setDeveloperKey(developerKey) 
          .setCallback(pickerCallback) 
          .build(); 
         picker.setVisible(true); 
         } 
        } 

       // A simple callback implementation. 
       function pickerCallback(data) { 
        if (data.action == google.picker.Action.PICKED) { 
         console.log(data); 
      addGoogleDrivePDF (data.docs); 

        } 
       } 

var addGoogleDrivePDF = function (file) { 
var pdfData = { 
       url: file[0].url 
      }; 

$http.post('/uploadto/s3/drtivepdf', pdfData) 
          .success((function (article) { 
           console.log(article); 
          }).error(function (error) { 
           console.log(article); 
          }); 

} 

Здесь я могу получения файла URL-адрес

как: https://drive.google.com/file/d/0B39VaBFZeygDNEVuWDYtYlgxNGhTeVdKNWtSX0tpT0FzeDRB/view?usp=drive_web

Вот мой код на стороне сервера

s3upload_rou.js файл (маршрутизатор файл)

app.post('/uploadto/s3/drtivepdf', function (req, res, next) { 
      next(); 
     }, bookmark.addGoogleDrivePDF); 

s3upload_ctrl.js файл (файл контроллера)

var async = require('async'); 
     var config = require('../config'); 
     var file = require('../libs/file'); 

     exports.addDropboxBookmark = function (req, res, next) { 
     saveGoogleDrivePdf(req.body.url, function (err, pdfDetail) { 
            if (err) { 
             cb(err); 
            } else { 
            res.send(pdfDetail); 
            } 
           }); 
     } 


     var saveGoogleDrivePdf= function (url, callback) { 
      async.waterfall([ 
       function (cb) { 
        var fileDetails = { 
         url: url, 
         name: 'drive/' + url.toString().replace(/^(http|https):\/\//i, ""), 
         contentType: 'application/pdf' 
        }; 
        file.uploadPdf(fileDetails); 
        cb(null, fileDetails); 
       },function (fileDetails, cb) { 
        console.log(fileDetails); 
        //create object for saving the pdf 
        var pdfDetail = { 
         pdf_url: fileDetails.url, 
         pdf_title: 'PDF FILE', 
         pdf_preview_image: config.defaultPreviewImageUrl, 
         pdf_file: fileDetails.name, 
         pdf_website: url.parse(url, false, true).host, 
         mode: 'pdf' 
        }; 
        cb(null, pdfDetail); 
       } 
      ], function (err, pdfDetail) { 
       if (err) { 
        callback(err); 
       } else { 
        callback(null, pdfDetail); 
       } 
      }); 
     } 

Вот мой file.js код: -»

var request = require('request'); 
     var config = require('../config'); 
     var url = require('url'); 
     var http = require('http'); 
     var pool = new http.Agent(); 
     var streamingS3 = require('streaming-s3'); 
     exports.uploadPdf = function (details, cb) { 
      var options = { 
       url: config.s3.url + 'upload/drive',   
       method: 'POST', 
       json: true, 
       body: details, 
       headers : { "x-api-key": config.s3.apiKey, "x-aws-bucket": config.aws.bucket, "Content-Type": 'application/json' }, 
       agent: pool 
      }; 
      request(options, function (err, res) { 
       if (err) { 
        console.log(err); 
        logger.log('error', "PDF Error: ", { error : err , details: details }); 
       } else { 
        console.log(res.body); 
        logger.log('info', "UPLOAD PDF", { response : res.body }); 
       } 
      }); 
     }; 

Выгрузка работает нормально, но когда я пытаюсь просмотреть этот файл на S3, я не могу открыть его.

Любая причина?

Благодаря

+0

Вы можете попробовать по этой ссылке passign https://drive.google.com/file/d/0B39VaBFZeygDNEVuWDYtYlgxNGhTeVdKNWtSX0tpT0FzeDRB/view ? альт = СМИ –

ответ

0

Для загрузки выбранного файла с JS, используйте этот

function downloadFile(file, callback) { 
    if (file.downloadUrl) { 
    var accessToken = gapi.auth.getToken().access_token; 
    var xhr = new XMLHttpRequest(); 
    xhr.open('GET', file.downloadUrl); 
    xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); 
    xhr.onload = function() { 
     callback(xhr.responseText); 
    }; 
    xhr.onerror = function() { 
     callback(null); 
    }; 
    xhr.send(); 
    } else { 
    callback(null); 
    } 
} 
Смежные вопросы