2012-04-30 2 views
1

Выпуск № 1Google Docs файл загрузки и собираемые Выпуск

Когда я загружаю файл в Google Docs, которые я получаю код состояния «201» создан, но когда я пытаюсь открыть файл, кажется, что я» я делаю что-то неправильно, потому что я не могу его открыть, и когда я пытаюсь загрузить и открыть его на своем ПК, я вижу двоичные данные вместо текста или изображения. Текущий язык - APEX, но я думаю, что это довольно понятно.

Прежде всего, я получаю URL-адрес загрузки, а затем помещаю данные на этот URL-адрес;

public void getUploadURL() 
{ 
    Httprequest req = new Httprequest(); 
    req.setEndpoint('https://docs.google.com/feeds/upload/create-session/default/private/full?convert=false'); 
    req.setMethod('POST'); 
    req.setHeader('GData-Version', '3.0'); 
    req.setHeader('Authorization', 'OAuth '+accessToken); 
    req.setHeader('Content-Length', '359'); 
    req.setHeader('X-Upload-Content-Type', fileType); 
    req.setHeader('X-Upload-Content-Length', fileSize); 


    Dom.Document requestDoc = new Dom.Document(); 

    String xml = 
      '<?xml version=\'1.0\' encoding=\'UTF-8\'?>' 
      +'<entry xmlns="http://www.w3.org/2005/Atom" xmlns:docs="http://schemas.google.com/docs/2007">' 
      +'<title>'+fileName+'</title></entry>'; 

    requestDoc.load(xml); 
    req.setBodyDocument(requestDoc); 
    Http h = new Http(); 
    Httpresponse res = h.send(req); 
    System.debug('response=\n'+res.getHeader('Location')); 
    uploadFIle(res.getHeader('Location')); 
} 

public void uploadFIle(String uploadUrl) 
{ 
    Httprequest req = new Httprequest(); 
    req.setEndpoint(uploadUrl); 
    req.setMethod('PUT'); 
    req.setHeader('GData-Version', '3.0'); 
    req.setHeader('Authorization', 'OAuth '+accessToken); 
    req.setHeader('Host', 'docs.google.com'); 
    req.setHeader('Content-Length', fileSize); 
    req.setHeader('Content-Type', fileType); 
    req.setBody(''+binaryData); 
    Http h = new Http(); 
    Httpresponse res = h.send(req); 
    System.debug('response=\n'+res.getBody()); 
} 

Что касается свойства "BinaryData" - я получить его со страницы, используя JavaScript следующим образом:

<input type="file" id="myuploadfield" onchange="getBinary()"/> 
    <script> 
     function getBinary() 
     { 
      var file = document.getElementById('myuploadfield').files[0]; 
      fileSizeToController.val(file.size.toString()); 
      fileNameToController.val(file.name.toString()); 
      fileTypeToController.val(file.type.toString()); 
      var r = new FileReader(); 
      r.onload = function(){ binaryToController.val(r.result); }; 
      r.readAsBinaryString(file); 
     } 
    </script> 

r.onload = функция() {binaryToController.val (r.result); }; - это строка, которая отправляет двоичные данные файла моему контроллеру.

Выпуск № 2

Я пытаюсь переместить одну коллекцию (папку) в другой, и с помощью this article (вкладка протокола вместо .NET). Проблема в том, что мне нужно переместить коллекцию, а не копировать ее, и когда я добавляю свою коллекцию в другую, используя эту статью, я в настоящее время добавляю ссылку на свою коллекцию, а не перемещаю всю коллекцию из одного места в другое.

Пожалуйста, скажите мне, что я делаю неправильно.

Благодарим вас за рассмотрение.

ответ

0

Ваши двоичные данные повреждены, когда вы выполняете '' + binaryData.

В общем, у меня было больше успехов, используя slicing of files, вот пример для WebKit:

var chunk = this.file.webkitSlice(startByte, startByte + chunkSize, file_type); 
// Upload the chunk 
uploadChunk(startByte, chunk, callback); 
+0

Любая информация о втором выпуске? –

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