我使用以下代码在Google云端硬盘上设置要上传的文件的缩略图:
// Set thumb nail path
String thumbnail_path = mediaContent.getFile().getAbsolutePath();
// thumbnail_path : "/sdcard/Picture/ds01.jpg"
// File's meta data.
File body = new File();
body.setTitle(fileContent.getName());
body.setMimeType("image/jpeg");
// Thumb nail
final Thumbnail thumbnail = new Thumbnail();
thumbnail.setMimeType("image/jpeg");
// UPDATE HERE : define byte array
byte[] data = Base64.decodeBase64(getData(thumbnail_path));
thumbnail.encodeImage(Base64.encodeBase64String(data));
// set thumb nail for file
body.setThumbnail(thumbnail);
代码运行成功,但我觉得有些不对劲,我不知道在哪里。 因为我使用以下代码来获取与文件相关的信息,并且 file.getThumbnail()为null 。 ( getTitle()和getMimeType()成功)。
private static void printFile(Drive service, String fileId) {
try {
File file = service.files().get(fileId).execute();
System.out.println("Title: " + file.getTitle());
System.out.println("MIME type: " + file.getMimeType());
System.out.println("getThumbnail: " + file.getThumbnail());
} catch (IOException e) {
System.out.println("An error occured: " + e);
}
}
以下代码用于上传,成功:
String folderId = ManageFile.getIdLink();
Log.d(TAG, "folderId " + folderId);
body.setParents(Arrays.asList(new ParentReference().setId(folderId)));
File file = service.files().insert(body, mediaContent).execute();
更新: - 我添加了那些代码来描述如何获取字节数组。
protected byte[] getData(String thumbnail_path) {
byte[] imageData = null;
final int THUMBNAIL_SIZE = 96;
FileInputStream fis;
try {
fis = new FileInputStream(thumbnail_path);
Bitmap imageBitmap = BitmapFactory.decodeStream(fis);
imageBitmap = Bitmap.createScaledBitmap(imageBitmap, THUMBNAIL_SIZE, THUMBNAIL_SIZE, false);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
imageBitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
// byte data array
imageData = baos.toByteArray();
return imageData;
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return null;
}
p / s: - Get file - File resource
请告诉我如何让拇指指甲图像成功。 谢谢!
答案 0 :(得分:1)
您需要提供Base64编码的图像内容而不是路径。
final Thumbnail thumbnail = new Thumbnail();
thumbnail.setMimeType("image/jpeg");
thumbnail.setImage(base64encodedContent);
答案 1 :(得分:0)
您解码来自getData
方法的未编码的数据。
您还应该使用Base64.encodeBase64URLSafeString
代替Base64.encodeBase64String
。为方便起见,您可以使用File.Thumbnail.encodeImage方法。那将为你做编码。
替换它:
byte[] data = Base64.decodeBase64(getData(thumbnail_path));
thumbnail.setImage(Base64.encodeBase64String(data));
用这个:
byte[] data = getData(thumbnail_path);
thumbnail.encodeImage(data);