Google Drive File Picker and Download the file

This articles should how to use picker on google drive and then download the picked files(limit to photos) use the javascript

Setup on google drive.

Go to the google developers console:  https://console.developers.google.com/
Create a new project or select a exist project,

and enable two libraries:  “Google Picker API” and “Google Drive API”
there are no special setup on “Google Picker API”, but for “Drive API”, it need go setup “Drive UI Integration”:

Client ID should same as the “OAuth 2.0 client IDs” in this project.
Open URL should same as the url of your web site domain, or a specific URL where you try to download the files.

Go back to Crediential of Oauth,

the same domain setup on previous steps is also list on “Authorized JavaScript origins”,

the open url we input on previous steps is list on “Authorized redirect URIs. it best list all your related URL into redirect URI.

prepare the keys we need on code step:

 //Google Client Id
var googleClientID='954222223338828-f21pukla0g67531760s0ed1575qaivth.apps.googleusercontent.com'
//Google App Id
var googleAppId='954222223338828'
//google drive picker
var googleDrivePickerDevelopKey='AIzaBHzK0WWvRj5DF9jgV6sTJpGwxzSyDfGcj0s'

That’s all in Google Console.

Let’s start write code for it.

First of all, insert the google js file into the html

<script type="text/javascript" src="https://apis.google.com/js/api.js?onload=onApiLoad"></script>
<script type="text/javascript" src="https://apis.google.com/js/client.js"></script>

The second js code is google client libriry,  it’s quickly and easy to use, but on this article, I’ll not use this one.

build the picker, remember we have 3 variables get from google console before, we need use on the code files.

First of all, let’s build the Picker.

/**Google drive ***/
var pickerApiLoaded = false;
var oauthToken;
var fileId;
//Photos Scope can't get the data we wanted, the solution, is use Drive only scope,
//And view.setMimeTypes("image/png,image/jpeg,image/jpg"); to only view the images
//  var googleScope = ['https://www.googleapis.com/auth/photos'];
var googleScope='https://www.googleapis.com/auth/drive.readonly'
// Use the Google API Loader script to load the google.picker script.

function loadPicker() {
    gapi.load('auth', {'callback': onAuthApiLoad});
    gapi.load('picker', {'callback': onPickerApiLoad});
}

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

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

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

// Create and render a Picker object for searching images.
function createPicker() {
    if (pickerApiLoaded &amp;&amp; oauthToken) {
        var view = new google.picker.View(google.picker.ViewId.DOCS);
        view.setMimeTypes("image/png,image/jpeg,image/jpg");
        var picker= new google.picker.PickerBuilder()
            .enableFeature(google.picker.Feature.NAV_HIDDEN)
            .enableFeature(google.picker.Feature.MULTISELECT_ENABLED)
            .setAppId(googleAppId)
            .setDeveloperKey(googleDrivePickerDevelopKey)
            .setOAuthToken(oauthToken)
            .addView(view)
            .setCallback(pickerCallback)
            .build()
            .setVisible(true);

    }
}
// A simple callback implementation.
function pickerCallback(data) {
}<

We need download image after Picker, the photo scope on Picker can’t get the right file ID,  to solute this,  Use  drive scope and limit the mimeTypes.

Handle the data from File Picker and download it

function pickerCallback(data) {
 if (data.action == google.picker.Action.PICKED) {
 fileId = data.docs[0].id;
 $http.get('https://www.googleapis.com/drive/v2/files/' +fileId+ '?alt=media',
 {
   headers: {'Authorization': 'Bearer '+oauthToken}
 }).success(function(file){
   //file is the image object
 })
 }
}

$http is from angularJs, you can replace this with the js framework you used, or use the google client js library.

?alt=media

which will return the image, otherwise it will return json code with image name, image downloadUrl(that Url still need oauth token) etc.

headers: {'Authorization': 'Bearer '+oauthToken}

We need setup Authorization token on the hear, otherwise we can’t visit the file.

It’s simple, we can handle the image in the js code now,  but it’s not end for me, I need directly download the files on remote server, not download on the js code to user browser.

Let’s change the code to download the file on remote server

function pickerCallback(data) {
 if (data.action == google.picker.Action.PICKED) { 
   $http({
     method: 'POST',
     url: 'theUrlWhichDownloadImage.php',
     dataType: 'json',
     crossDomain: true,
     data: {
       oAuthToken:oauthToken,
       fileId: data.docs[0].id,
       name: data.docs[0].name,
       mimeType:data.docs[0].mimeType
     },
     headers: {'Content-Type': 'application/x-www-form-urlencoded'}
   })
   .success(function (data2) {

   })
   .error(function (data2) {

   });
 }
}

replace with get the files from google drive api, we send the file id, the oauth token to remote server, which used to download the file.

and on the remote server, a php file was created and recevied the data, try to download the file from google drive.

 

$request_body = file_get_contents('php://input');
$param = (array)json_decode($request_body);
$oAuthToken = $param['oAuthToken'];
$fileId = $param['fileId'];
$getUrl = 'https://www.googleapis.com/drive/v2/files/' . $fileId . '?alt=media'; //
$authHeader = 'Authorization: Bearer ' . $oAuthToken;
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $getUrl);
curl_setopt($ch, CURLOPT_HTTPHEADER, array($authHeader));
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$data = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);

The image was on $data. save it and return the path to js code on fronend.

$path='examplepath/';
file_put_contents($path.$param['name'], $data)
//return the file URL to js code.

Compare to OneDrive, DropBox,  Google Drive File Picker and download files is much more complex. hope this Article can help you.

那就这样吧

从深圳飞到上海, 想给她惊喜, 想陪着她。

于是, 我得感恩她在百忙之中赏赐时间陪我去酒吧。

回来后我继续把自己灌得烂醉,宿醉, 直到早上, 头痛欲裂, 到现在。

No hope, 如此自我的一个女人, 知道我要来, 专门为她而来, 却只是不停地在安排自己的游玩, 约会。 只保持暧昧。我想这只能意味着她在行动说不愿意见我,  那我继续犯贱又有什么意思? 我她妈的谢谢你在百忙中之中见我一面吗?

顶着初冬的冷雨在街上来回走了两天, 终于病了, 也许这能够让自己清醒一点。

但是我的耐心真的是有限度的, 在看到她安排时间时,“那就这样吧”, 我感到了深深地绝望。 爱她, 愿意为她付出所有的, 但是请让我看到希望。 住在离她家离近的酒店, 地理上的无限接近, 却是心理上永恒的距离。

你在无情地浪费着我对你的爱, 消磨待尽。

以后我再也不会干这种蠢事,

那就这样吧。

It’s not perfect, it’s just an ending.

盘恒十几日, 只为见她一面。

有人问我:有何意义?

没有任何意义, 我只是想 在离开之前见她最后一面, 这只是一种执念。

是怕这一生再也见不到她, 只想把她的容颜最后刻画在脑海里。 或只是不甘心这样离开, 见过也许会少点遗憾吧。

我想我并不明白这两者的区别, 我只是想见到她, 那就够了。

不幸在截稿前她的电脑两次崩溃逼她不停地重写, 电话那头绝望语气和第一次听到从她嘴里出来的脏话, 让我很想冲到她面前, 给她一个温暖的怀抱,替她承受所有的不开心和压力。

可真的见到她时, 满脸的疲惫, 毫无生气的眼神, 急着赶回家赶稿。 我在怀疑我否太自私了 , 只为了自己想见她的冲动,毫无意义的冲动, 而担误了她的工作。

我希望她可以开心, 也希望我能够看到她的开心。 两者茅盾时, 我又该怎么办?自责还是忏悔。

后来,  当她再一次通宵达旦, 我所能想起的只有她那满脸的疲倦和无助, 绝没有笑容。

我从未走近她心里, 只是我终于走出了她的视界。

并非所有的ending都是完美的, 但是这种愧疚会伴随着我一生。
对不起。

路在何方

10年第一次离开杭州跑到上海, 记得出发前夜, 同事们跑到中河中路海吃海喝一顿, 再跑到西湖边, 尼康的卡片机只能留下shen人的光影, 远山近水, 牙齿眼睛。然后记忆消失在那个夜晚,那些歌。

一年之后, 离开, 去个更年青的城市寻找梦想。 失败, 死宅在家,代码, 游戏, 啤酒, 泡面, tui废了一年又一年。

不想就这样废掉一辈子, 于是当老姐叫我去工作时, 那就出发吧。

从油菜花遍野的江南山村, 一个背包,一张车票。  当场景切换水泥森林, 我知道我到了。

在之前, 做了一份swot分析,

积极工作, 消极工作以及不去。   绝大多数朋友给我的是积极工作和不去。

然后, 在和boss的第一次会谈之后, 我选择了消极工作。  那是一种直觉,只是让我感觉面前的这个人并不是可以信赖的对象。

于是, 消极工作是我的选择。  我只要做得比别人好一点就行了, 这货不值得我去拼命,   工作并未看到前景, 而在可预计的几年内我还可以敲代码维挂生计。 而最后的结局是否也证明了主观意念最终会左右局势发展。

春未, 落樱氛飞, 每天下车后捧着早餐在间行走。 终于感觉自己活的像正常人了, 有份工作, 早9晚5, 也曾chongjing过就此安定, 计划着半年后买车, etc. etc.  却始终感觉缺失了点什么东西。 而这点, 直到前几天有个朋友半夜打了一个多小时电话, 最终删掉微信后才知道: 至始至终, 我只是像无头苍蝇一样乱撞, 没有目标。  是的, 并不是因为乐爱, 甚至并不是为了工资而去选择工作的,只是原来的生活方式我要改变, 所以我才选择了去工作, 在内心中, 我至始至终都不认为自己能够坚持。  于是, 在旅馆里面一个住了一个多月, 直到我姐一直烦着把我耳朵磨出茧了, 我才开始去租房。

作为一个始终不知道 自己想要的人, 我在工作之始却确立了几个目标, 接触社会,少碰电脑。

接触社会:  作为一个人情商极低的孩子, 我始终无法参透老姐口中说的办公室斗争。 但是感觉同的关系也y不那样吧, 至始至终没感觉到被利用的场景, 好悲衷。

少碰电脑: 要知道这东西有个高上大的名字叫工作啊, 而且这不是it公司。 所以我幻想着少碰电脑啊少碰电脑, 我要运动, 我要体力活!    可是作为我亲爱的老姐, 她居然让步老板把公司网站的改版交给我, 我真想确认三次。 这是工作吗?这是吗, 这是吗?   我是来工作的, 不是来敲代码的!!! 她的出发点是好的, 拿点东西镇场。 可是我需要镇场吗, 我那么胖, 往哪一站都是镇场。     任何事情都是有比较, 当白天的大好时光敲8个小时还比不上晚上敲2个小时时, 我不镇定了, 爱谁谁去, 要我干敲代码的事, 我就偷懒。

做公司网站始终不是正事, 更多的活在于所谓的工程师二字。 据说有两个方向, 摊开了讲一个是打印工人, 一个是不需要设计的设计师。   打印工人多好啊, 不用碰电脑, 都是体力活动, 过上两个月, 我一身的肥肉可以变成肌肉, 身价那是蹭蹭地往上涨啊。 于是我守在打印机房学习去了。  打印机的学名是叫uv打印机。   好学如我马上维基, 妈蛋, 这货是紫色线的英文, 怎么感觉皮肤这几天黑了好多, 白白胖胖还可以接受, 要是黑胖, 那画面太美我不敢想象。 墨水, 怎么这么臭, 我快晕了, 肯定会致癌吧。   赶紧地, 身体是革命的本钱, 老婆还没找呢, 怎么能出师未捷身先死。    也许是我姐太想我干好, 我直接说这货对身体有害我不干后, 她居然不同意, 重复了无数次, 就差找出相关论文了。 这是全场唯一对她不满的地方, 钱, 时间的都无所谓, 关系身家性命居然也如此莫视。  也仅此而已。

持有为祖国再工作50年的激情, 我开始玩设计去了。  不用设计的设计师,两个技能就可 以秒杀天下了, 对色和抠图。   我的美好幻想又一次破灭了, 那么多构图的, 调色的, 修图的书白买了。 看着他们我只能在心中默念:一顿小龙虾, 两顿小龙虾。   于是, 场景如此: 技术主管和其实人只是把图抠出来, 加加背景什么的, 打印。 我在尝试按照自己的想法做各种东西, 看着它们有些因为自己设计原因, 有些因为打印机性能而报废, 最后还得赶紧随便抠点图出来交差。    这里又可以回到与人接触的问题了, 当我在尝试着各种想法的时候, 旁边的技术主管一直会在旁边烦着, 这样不行, 那样不可能打出来的。 我选择了沉默以对, 没有任何沟通, 然后继续干自己的活。 我Y是来练气功的, 不是来学习与人接触的吗?!   好后悔, 当东西打出来时我应该狠狠地打他脸的, 这么好的机会我居然没有珍惜。

继续扯与人接触的。 这家公司有个奇疤的现象, 当boss走进来时, 所有的人都会扔下手上的活围在他旁边。 这时候boss要是弄个和腊肉一样的发型该有多符合场景, 我还是坚持相信虽然我姐也是这样做的, 这绝不是她的本意, 因为她是小秘啊, 工作职责所在,肯定是的。   这种时候看着旁边一圈空的位置好有孤独感, 我只能对自己说, 我只是不关于交际, 绝不是为了显示与众不同。  另一个问题是: 好像我接触过成功的老板都是和状况型的, 即使是伪君子型, 是因为这种人容易成功呢, 还是非这种人人家根本不xie于理踩我。

说起来, 这种混吃的等死的日子真的很适合养老。 可是我还没30啊(还有好几天呢), 更何况没有老婆, 又没有老婆本。 于是, 上进青年白天上班, 晚饭上接客, 每天3点睡觉, 8:30起床的作息终于让我崩溃了。这是

That girl

路很长, 窗外万家灯光闪亮消逝, 无始无终。

车上, 满脑子装着的只是你的身影,每一个笑容都是如此清淅,只是前一秒。

是的, 只是前几秒, 或者是几分钟。  直到计时器上的时钟跳过12点, 才可以确定地告诉自己, 如此地漫长, 是已经真的过了一天。

倔强, 可爱, 主见, 独立, 直率。

被女孩赶着上出租, 她自己却走路回家, 即使她只是为了欣赏风景和路人。

看电影时可以有很夸张的惊吓动作, 没有被电影吓到, 倒是被她吓到了

倔强地甚至顽强地喜欢处女座

毫无作伪地女汗子作风

以及, 在她的眼睛里, 看不到一丝的杂质

这样的一个女孩, 如丁香一般,  尽情地涨放着自己的风彩却从不喧嚣。

感谢上天, 让我遇到这样一个女孩, 即使不是在雨巷。

你说你很难伺候, 我只想挑战。

只因我喜欢你。

一个等待了几年而最终出现的女孩。

天猫的垃圾体验–只有抱歉

为了播放家里的老电视, 去买了天猫魔盒(传说中天猫自己的店)。
悲剧就此开始。
在售前特意询问确定可以ems包邮:

天猫客服在售前确认可以ems
天猫客服在售前确认可以ems
天猫客服在售前确认可以ems
天猫客服在售前确认可以ems
出事了, 请注意他们的自动回复, 还是说会转ems的
出事了, 请注意他们的自动回复, 说会转ems的

 

顺丰帮我寄到20公里外, 叫我自提, 说好的ems呢?

 

fuck-tmall-4

fuck-tmall-5

fuck-tmall-6

fuck-tmall-7

fuck-tmall-8

fuck-tmall-9

 

简单的说:人家就是不转, 就两个字“抱歉”。

理由, 快递来不及, 那么我顺丰, ems两边的送货人员(农村, 都固定的人员了)都沟通过。

顺丰说根本没有提及转运这回事,   ems说可以送到, 而且我甚至说年后到也是我自己的责任。

还是两个字“抱歉”。

 

我只能呵呵。

 

作为天猫自己的官方店, 所得到的用户体验是最差的。

京东, 亚马逊,苏宁这些不用说, 淘宝,天猫, 甚至国美相对都比它好了不知多少倍。

 

 

 

结果: 浪费了两个多小时的时间: 整个春节只能在手机上面看电视了。以后除了买假货绝不上淘宝天猫, 至于开公司的, 阿里巴巴我也用过, 纯粹是浪费钱(现在把号码公布在阿里巴巴只会召吸垃圾电话, 而关掉后, 整个世界都清静了), 百度的效果不知道好多少倍。

 

比较情绪化, 写的很乱。     超出30天没有全额退款就要求银行贷款利息直接向杭州工商局投诉了, 当然杭州工商局据收都被淘宝收卖(mai)的, 从深圳迪蒙公司PK淘宝 这个事件可见这种经济黑势力的威力。   刚写了天猫投诉的, 不在乎天猫能够有任何善意的回馈, 只想接着从天猫的feedback中观察马云猴子带领下的骗子的丑恶的嘴脸。