我正在尝试创建一个Google驱动安卓应用,我可以从Google云端硬盘下载调整大小的图片。
这是一种性能问题。 假设我已经从我的计算机上传了一张1080px的图像,现在我希望将该图像下载到我的不支持1080px图像的Android手机上,所以会发生的情况是先下载图像,然后根据我的设备尺寸调整图像大小。但这实际上是浪费时间和数据。
为什么在我只能显示时下载1080px图像可能像480px或720px图像。
我正在使用谷歌驱动器api,但我想知道是否有一些参数或我们可以通过手机传递的东西,以便我们只能下载调整后的图像。
根据我的搜索, Link
有这个部分下载,我可以提供一系列字节,但我不是要下载文件的特定部分,我想以调整大小的格式下载整个图像文件。
任何想法,线索都会非常有用。
由于
答案 0 :(得分:2)
答案适用于RESTful Api,因为GDAA没有' thumbnailLink'截至今日(2015年2月14日)的功能。
我使用此代码段下载缩小的图像和缩略图:
/**
* get file contents, specifically image. The thmbSz, if not zero, it attempts to
* retrieve an image thumbnail that fits into a square envelope of thmbSz pixels
* @param rsId file id
* @param thmbSz reduced size envelope (optional value, 0 means full size image / file)
* (tested with: 128,220,320,400,512,640,720,800,1024,1280,1440,1600)
* @return file's content / null on fail
*/
com.google.api.services.drive.Drive mGOOSvc;
...
static byte[] read(String rsId, int thmbSz) {
byte[] buf = null;
if (rsId != null) try {
File gFl = (thmbSz == 0) ?
mGOOSvc.files().get(rsId).setFields("downloadUrl").execute() :
mGOOSvc.files().get(rsId).setFields("thumbnailLink").execute();
if (gFl != null){
String strUrl;
if (thmbSz == 0)
strUrl = gFl.getDownloadUrl();
else {
strUrl = gFl.getThumbnailLink();
if (! strUrl.endsWith("s220")) return null; //--- OOPS ------------>>>
strUrl = strUrl.substring(0, strUrl.length()-3) + Integer.toString(thmbSz);
}
InputStream is = mGOOSvc.getRequestFactory()
.buildGetRequest(new GenericUrl(strUrl)).execute().getContent();
buf = UT.is2Bytes(is);
}
} catch (Exception e) { UT.le(e); }
return buf;
}
我有一些测试它有几个尺寸(请参阅方法标题),我从Picasa documentation here.
抓取请参阅' thumbnailLink'具有
的形式https://lh4.googleusercontent.com/R1Pi...blahblah...08qIhg=s的 220 强>
并通过更改' 220'最后是其中一个值:
128,220,320,400,512,640,720,800,1024,1280,1440,1600
我设法拉出了请求大小的图像(让服务器减少它)。
免责声明:
它不是一个记录的功能,所以它是一个HACK。我也承认更强大的版本不应该依赖于找到" s220",但可能" = sNUMBER" patttern。 祝你好运。