当前位置: 首页 > 知识库问答 >
问题:

如何在android Studio中压缩文件以在云中上传?

秦联
2023-03-14

我使用AWS Amplify作为后端,并使用Amplify S3存储图像和视频。但我想以尽可能最好的压缩方式上传文件(例如1.5mb)-

          try {
                InputStream exampleInputStream = getContentResolver().openInputStream(uri);

                Amplify.Storage.uploadInputStream(
                        editText.getText().toString(),
                        exampleInputStream, StorageUploadInputStreamOptions.defaultInstance(),
                        this::showProgress,
                        this::uploded,
                        storageFailure -> Log.e("MyAmplifyApp", "Upload failed", storageFailure)
                );
            }  catch (FileNotFoundException error) {
                Log.e("MyAmplifyApp", "Could not find file to open for input stream.", error);
            }

共有1个答案

梁存
2023-03-14

我想推荐这个zip4j库。在我的例子中,我使用了版本2.9.1,所以你可以选择你想要的任何版本!。但是,在库中调用函数不同。因为,这取决于你使用的版本...这就是为什么我在上面提到了我的版本。

zip4j库

  1. 您可以使用我的代码片段来完成压缩任务。也可以解压缩

压紧

  • src-要压缩的路径或文件使用文件("FILE_OR_FOLDER_PATH"). getAbsoltePath()
  • dst-压缩文件的目标
  • ZIP_PASSWORD-您保护(压缩)文件的密码
   private boolean compressAsZip(String src, String dst) {
        File dstFile = new File(dst);
        //make dirs if necessary
        dstFile.getParentFile().mkdirs();
        try {
            ZipParameters parameters = new ZipParameters();
            // Setup encrypt true to protect with password
            parameters.setEncryptFiles(true);
            // Set encryption method
            parameters.setEncryptionMethod(EncryptionMethod.AES);
            // Setup password key length / strength
            parameters.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_256);
            // To include the folder to .zip
            parameters.setIncludeRootFolder(false);
            parameters.setCompressionMethod(CompressionMethod.DEFLATE);
            parameters.setCompressionLevel(CompressionLevel.ULTRA);
            ZipFile zipFile = new ZipFile(dstFile.getAbsoluteFile(), "ZIP_PASSWORD".toCharArray());
            zipFile.setRunInThread(true);
            zipFile.addFolder(new File(src), parameters);
            ProgressMonitor progressMonitor = zipFile.getProgressMonitor();
            while (!progressMonitor.getState().equals(ProgressMonitor.State.READY)) {
                //System.out.println("Percentage done: " + progressMonitor.getPercentDone());
                //System.out.println("Current getFileName: " + progressMonitor.getFileName());
                //System.out.println("Current task: " + progressMonitor.getCurrentTask());
                //System.out.println("Current total work: " + progressMonitor.getTotalWork());
                //System.out.println("Current total work completed: " + progressMonitor.getWorkCompleted());
            }
            if (progressMonitor.getResult().equals(ProgressMonitor.Result.SUCCESS)) {
                //System.out.println("Successfully added folder to zip");
                return true;
            } else if (progressMonitor.getResult().equals(ProgressMonitor.Result.ERROR)) {
                //System.out.println("Error occurred. Error message: " + progressMonitor.getException().getMessage());
                return false;
            } else {
                //System.out.println("Task cancelled");
                return false;
            }
        } catch (Exception exception) {
            //exception.printStackTrace();
            return false;
        }
    }

解压

  • src-要解压缩的压缩文件,请使用文件(“compressed\u file\u PATH”)。getAbsolutePath()
  • destination-存储压缩文件中提取的文件的目标
  • ZIP_PASSWORD-解压缩文件的密码
private boolean unZipFolder(String src, String destination) {
        try {
            ZipFile zipFile = new ZipFile(src);
            if (zipFile.isEncrypted()) {
                zipFile.setPassword("ZIP_PASSWORD".toCharArray());
            }
            zipFile.extractAll(destination);
            ProgressMonitor progressMonitor = zipFile.getProgressMonitor();
            if (progressMonitor.getResult().equals(ProgressMonitor.Result.SUCCESS)) {
                System.out.println("Successfully extracted data from the zip");
                return true;
            } else if (progressMonitor.getResult().equals(ProgressMonitor.Result.ERROR)) {
                System.out.println("Error occurred. Error message: " + progressMonitor.getException().getMessage());
                return false;
            } else {
                System.out.println("Task cancelled");
                return false;
            }
        } catch (ZipException e) {
            e.printStackTrace();
            return false;
        }
    }
 类似资料:
  • 问题内容: 任何人都可以向我展示在我一直在搜索的Java中压缩和解压缩tar.gzip文件的正确方法,但是我能找到的最多是zip或gzip(单独)。 问题答案: 我最喜欢的是plexus-archiver-请参阅GitHub上的资源。 另一个选项是Apache commons- compress- (请参阅mvnrepository)。 使用plexus-utils,用于取消存档的代码如下所示:

  • 问题内容: 我需要一个小的代码片段,该片段从给定的.zip文件中解压缩一些文件,并根据压缩文件中的格式提供单独的文件。请发表您的知识并帮助我。 问题答案: peno的版本进行了优化。性能的提高是可以察觉的。

  • 我正在使用Julia的ZipFile包来提取和处理csv文件。没问题,但是当我遇到zip文件中的zip文件时,我也想处理它,但是遇到了一个错误。 Julia ZipFile文档如下:https://zipfilejl.readthedocs.io/en/latest/ 对如何做到这一点有什么想法吗?

  • 问题内容: 我的应用程序正在通过SMTP服务器接收电子邮件。电子邮件中有一个或多个附件,电子邮件附件以byte []的形式返回(使用sun javamail api)。 我正在尝试快速压缩附件文件,而不先将其写入磁盘。 有什么/可能的方法来实现这一结果? 问题答案: 您可以使用Java的java.util.zip.ZipOutputStream在内存中创建一个zip文件。例如:

  • 我正在为嵌套在其他一些面板中的面板使用垂直BoxLayout。其他面板的大小会导致目标面板中的对象以不美观的方式展开。如何让面板在没有太多填充的情况下从上到下呈现对象? 下面是类似的代码,尽管它产生了填充整个面板的微调器,而不是相距甚远的普通微调器。

  • 压缩文件-->10个文件夹--每个文件夹>20个csv文件 null 尝试了以下代码,但不起作用