假设我有一个需要在后台服务中访问Drive文件的Web应用程序.它将拥有自己正在访问的文件,或者在所有者共享文档的Google帐户中运行.
我知道我的应用程序需要一个刷新令牌,但我不想编写代码来获取它,因为我只会做一次.
NB.这不是使用服务帐户.该应用将在传统的Google帐户下运行.在某些情况下,服务帐户是一种有效的方法.但是,使用Oauth Playground模拟应用程序的技术可以节省大量的冗余工作,并适用于不支持与服务帐户共享的任何API.
我有一个HTML5/javscript应用程序使用
<input type="file" accept="image/*;capture=camera" onchange="gotPhoto(this)">
Run Code Online (Sandbox Code Playgroud)
捕捉相机图像.由于我的应用程序希望脱机运行,如何将文件(https://developer.mozilla.org/en-US/docs/Web/API/File)对象保存在本地存储中,以便以后可以检索对于ajax上传?
我从使用中抓取文件对象...
function gotPhoto(element) {
var file = element.files[0];
//I want to save 'file' to local storage here :-(
}
Run Code Online (Sandbox Code Playgroud)
我可以对对象进行Stringify并保存,但是当我恢复它时,它不再被识别为File对象,因此不能用于获取文件内容.
我有一种感觉它无法做到,但我愿意接受建议.
fwiw我的工作是在商店时读取文件内容并将全部内容保存到本地存储.这可以工作,但很快消耗本地存储,因为每个文件是1MB加上照片.
我的应用程序需要UX中的复杂步骤才能到达其中的一些状态.这使得开发/测试周期非常麻烦,因为简单的布局更改必须在视觉上验证各种状态.
所以,我正在考虑以这样的方式获取正在运行的应用程序的转储/快照(即window.angular,或者也许是$ rootscope)的实用性,我可以从该快照快速恢复,运行$ rootscope. digest()和et voila.
有关如何实现这一目标的任何建议?
我不是在寻找恢复的快照来实现功能,例如它不需要有活跃的观察者或广播订阅.它只需要忠实地呈现视觉检查的视图.
- 编辑 -
我开始认为这不可能做到.
我已经意识到,从现在开始我的所有Angular项目都将有一个名为VmStateService的服务,基本上,影响渲染视图的每个VM数据项都必须存在于这个单一服务中,控制器.这样我只有一个干净的对象(它没有功能),我可以转储到字符串,或保存到本地存储,并恢复以创建我想要测试的任何视图.
我想不幸的是,每个人都通过做$ scope.foo ="bar"来学习AngularJS,然后花费他们职业生涯的剩余部分来实现创造的混乱.
我的应用程序有两个入口点(MainActivity和FromNotificationActivity).
我希望MainActivity出现在最近的任务中,但不是FromNotificationActivity)
如果我做的话,清单中没有宣布任何内容......
...我发现在最近的任务中列出了FromNotificationActivity
如果我android:excludeFromRecents="true"
在清单中添加 FromNotificationActivity并重复相同的序列,我在最近的列表中找不到任何内容.
我必须调用什么咒语,以便在上面的步骤序列之后,我在最近的列表中获得MainActivity.
我有一个测试,每次运行它,抛出" UnknownError:未知错误:超出最大调用堆栈大小. "
此测试在我的一项服务中调用了一种写入Google云端硬盘的方法.
失败的测试是使用"ui"调用我的doDrive函数,这意味着更新Drive项.如果我更改单个字符"ui" - >"ni",意味着创建一个新的Drive项目,测试工作.被测代码在正常使用中工作正常.
it('should update a file', function() {
browser.executeAsyncScript(function(callback) {
// get service
var service=angular.element(document.getElementById('ngapp')).injector().get('DriveQ')
// generate a title
var title = 'title of file';
// call doDrive to create a new file
service.doDrive({t:'ui',id:'0B6B-RNrxsCu2Sll7JZTYy2aDA', item:{title:title}})
.then(function (resp){
resp.originalTitle=title;
callback(resp)
});
}).then(function(resp) {
expect(resp.title).toEqual(resp.originalTitle);
});
});
Run Code Online (Sandbox Code Playgroud)
我直接使用chrome webdriver,我也有 browser.ignoreSynchronization = true;
browser-automation jasmine selenium-webdriver protractor chrome-web-driver
我在一个循环中插入100个文件.对于这个测试,我有DISABLED退避并重试,所以如果插入失败了403,我忽略它并继续下一个文件.在100个文件中,我得到63 403个速率限制例外.
但是,在检查Drive时,在63次故障中,3次实际成功,即.该文件是在驱动器上创建的.如果我做了通常的退避并重试,我最终会重复插入.这证实了我在启用退避重试时看到的行为,即.从我的100个文件测试中,我一直看到3-4次重复插入.
它闻起来像API端点服务器和Drive存储服务器之间存在异步连接,这会导致非确定性结果,尤其是在高容量写入时.
因为这意味着我不能依靠"403速率限制"来限制插入,我需要知道什么是安全插入速率,以免触发这些定时错误.
运行下面的代码,给出...
Summary...
File insert attempts (a) = 100
rate limit errors (b) = 31
expected number of files (a-b) = 69
Actual number of files = 73
Run Code Online (Sandbox Code Playgroud)
码...
package com.cnw.test.servlets;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.googleapis.json.GoogleJsonError;
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.jackson.JacksonFactory;
import com.google.api.services.drive.Drive;
import com.google.api.services.drive.model.ChildList;
import com.google.api.services.drive.model.File;
import com.google.api.services.drive.model.File.Labels;
import com.google.api.services.drive.model.ParentReference;
import couk.cleverthinking.cnw.oauth.CredentialMediatorB;
import couk.cleverthinking.cnw.oauth.CredentialMediatorB.InvalidClientSecretsException;
@SuppressWarnings("serial")
/**
*
* AppEngine servlet to …
Run Code Online (Sandbox Code Playgroud) 我的应用程序使用Oauthed Cloud Endpoints,在生产中运行良好.
我的问题是在本地devserver上,我的用户用户总是被设置为example@example.com,即使我已经通过了通常的身份验证,访问代码等等并且拥有一个有效的authed用户.
我得到那个example@example.com在oauth工作正常之前测试oauth端点是有用的,但是由于我的应用程序工作,我宁愿在那里看到实际的用户.
具体来说,我的端点方法是
@ApiMethod(name = "insertEmp"), etc
public Emp insertEmp(User user, Emp emp) {
System.out.println(user.getEmail()); // (A) log "appengine" email
System.out.println(OAuthServiceFactory.getOAuthService().getCurrentUser().getEmail(); // (B) log authed email
...
Run Code Online (Sandbox Code Playgroud)
部署后,一切正常,(A)和(B)都记录经过身份验证的用户(my.email@gmail.com).
在我的本地devserver上进行测试时,(A)总是记录"example@example.com",即使我已经完成了Oauth序列并拥有一个有效的,经过身份验证的用户,并且(B)记录了my.email@gmail.com.所以我可以进行高保真测试,我需要用户成为真正认证的用户.
所以简单来说,我如何让(A)和(B)相同?
这是一个常见问题.
情景是: -
folderA____ folderA1____folderA1a
\____folderA2____folderA2a
\___folderA2b
Run Code Online (Sandbox Code Playgroud)
...问题是如何列出根目录下所有文件夹中的所有文件folderA
.
这是使用Static Maps API.
我有一个带有3个img标签的网页,每个标签都是对静态地图API的调用,(当然这不是真正的api密钥).
3个标签是相同的,除了缩放,三个图像为10,13和16.
API密钥来自启用了静态地图API的项目,并且已配置并启用了计费.
我总共发出了60个请求(这是一个全新的开发项目,所以我刚刚开始).
我所看到的是,有时会显示所有三个地图.在其他时候,一个(从三个中随机)地图失败了
403"Google Maps API服务器拒绝了您的请求.此API项目发现内部错误."
因此,如果我刷新页面5次,即15次请求,我会得到大约4次失败和11次成功.
那么为什么谷歌地图随机拒绝这个403的一些请求呢?
在我的JavaScript中,我实现了一个隐藏标题栏的功能,该功能由scrollEvent触发。因此,当我向下滚动时,标题栏被隐藏。当我开始向上滚动时,它就会显示出来。可以将其视为与大多数移动浏览器使用搜索栏产生的相似效果。
事情就是这样……在打开devtools的情况下,它工作得很好。如果我关闭devtools,则效果不再起作用。向下滚动时,标题栏仍然可见。如果我重新打开devtools(ctrl-shift-j),效果将再次起作用。我在单独的窗口中运行devtools,因此它的存在不会影响我的应用程序的窗口尺寸。
有人知道Chrome devtools的存在对Javascript或呈现行为有什么影响吗?
注意,对于任何想念我问题要点的速读读者,我并不是要寻求解决所遇到问题的方法。我只是在问我问题的答案。
编辑:我现在发现在前台vs背景中使用devconsole也很重要。将控制台放在前台时,它可以在后台运行,而在后台则失败。在https://ibb.co/4M75sPQ上查看动画gif
javascript ×2
android ×1
angularjs ×1
gmail-api ×1
google-api ×1
google-maps ×1
google-oauth ×1
html5 ×1
jasmine ×1
protractor ×1