Android-如何将动画GIF文件上传到Parse Server

时间:2019-03-14 15:52:20

标签: java android gif parse-server parse-android-sdk

我正在开发一个具有Parse Server Android SDK的应用程序,并且我知道如何将视频文件转换为bytes[]数组,这是我使用的代码:

private byte[] convertVideoToBytes(Uri uri){
        byte[] videoBytes = null;
        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            FileInputStream fis = new FileInputStream(new File(getRealPathFromURI(uri)));

            byte[] buf = new byte[1024];
            int n;
            while (-1 != (n = fis.read(buf)))
                baos.write(buf, 0, n);

            videoBytes = baos.toByteArray();
        } catch (IOException e) { e.printStackTrace(); }
        return videoBytes;
    }
    // GET VIDEO PATH AS A STRING -------------------------------------
    public String getRealPathFromURI(Uri contentUri) {
        String[] filePathColumn = { MediaStore.Images.Media.DATA };
        Cursor cursor = ctx.getContentResolver().query(contentUri, filePathColumn, null, null, null);
        assert cursor != null;
        cursor.moveToFirst();
        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
        String filePath = cursor.getString(columnIndex);
        cursor.close();
        Log.i(TAG, "VIDEO PATH: " + filePath);
        return filePath;
    }


但是我无法上传 GIF 文件,我已经尝试了这段代码,但是它没有任何作用,保存后数据库中.gif文件的单元格为空在saveInBackground()的背景下:

Uri path = Uri.parse("android.resource://" + BuildConfig.APPLICATION_ID + "/" + R.drawable.my_animated_gif_from_drawable);
String gifPath = path.toString();

File file = new File(gifPath);
Log.i(TAG, "GIF PATH: " + file.getAbsolutePath());

ByteArrayOutputStream out = new ByteArrayOutputStream();
try {
    BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));
    int read;
    byte[] buff = new byte[1024];
    while ((read = in.read(buff)) > 0) { out.write(buff, 0, read); }
    out.flush();
    byte[] bytes = out.toByteArray();

    ParseFile gifFile = new ParseFile(gifName + ".gif", bytes);
    bObj.put(BUZZ_GIF, gifFile);

} catch (FileNotFoundException ignored) {
} catch (IOException ignored) { }


有人知道如何将 .gif 文件作为ParseFile上传,或者只是将其转换为bytes[],以便我可以使用新的ParseFile 功能?

1 个答案:

答案 0 :(得分:1)

这是将gif文件上传到解析服务器的方法

File file = new File(path);
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                try {
                    BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));

                    int read;
                    byte[] buff = new byte[1024];
                    while ((read = in.read(buff)) > 0) {
                        out.write(buff, 0, read);
                    }
                    out.flush();
                    byte[] bytes = out.toByteArray();

                    image = new ParseFile(name, bytes);
                } catch (FileNotFoundException ex) {
                } catch (IOException ex) {
                }


 if (imageAttached) {
            String name = path.substring(path.lastIndexOf("/"));


            image = new ParseFile(name, Util.convertBitmapToBytes(bitmap));
            image.saveInBackground(new SaveCallback() {
                @Override
                public void done(ParseException e) {
                    if (e == null) {
                        post.put(DuzooConstants.PARSE_POST_IMAGE, image);
                        post.pinInBackground(new SaveCallback() {
                            @Override
                            public void done(ParseException e) {
                                if (dialog.isShowing())
                                    dialog.dismiss();
                            }
                        });
                        post.saveInBackground();
                    }
                }
            });
        } else {
            post.pinInBackground(new SaveCallback() {
                @Override
                public void done(ParseException e) {
                    if (dialog.isShowing())
                        dialog.dismiss();
                    returnToHomeActivity();
                }
            });
            post.saveInBackground(new SaveCallback() {
                @Override
                public void done(ParseException e) {
                }
            });
        }
    }