【问题标题】:Android - How to upload an animated GIF file to Parse ServerAndroid - 如何将动画 GIF 文件上传到 Parse Server
【发布时间】:2019-08-05 14:30:45
【问题描述】:

我正在开发一个具有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[] 以便我可以使用 new ParseFile 功能?

【问题讨论】:

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


    【解决方案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) {
                    }
                });
            }
        } 
    

    【讨论】:

      猜你喜欢
      • 2020-07-07
      • 2018-07-17
      • 1970-01-01
      • 1970-01-01
      • 2018-11-12
      • 1970-01-01
      • 2020-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多