设置缩略图图像以便在Google云端硬盘上传

时间:2013-07-16 10:21:15

标签: android google-drive-api

我使用以下代码在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

请告诉我如何让拇指指甲图像成功。 谢谢!

2 个答案:

答案 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);