繁体   English   中英

为什么我会收到 AmazonS3Exception?

[英]Why am I getting a AmazonS3Exception?

我的任务是加密上传到 S3 的文件。 在加密之前上传工作正常,但现在在我加密文件后我得到了这个异常。

The XML you provided was not well-formed or did not validate against our published schema

我将此添加到现有代码中

        final AwsCrypto crypto = new AwsCrypto();

        try (
            final FileInputStream in = new FileInputStream(encryptfile);
            final FileOutputStream out = new FileOutputStream(file);
            final CryptoOutputStream<?> encryptingStream = crypto.createEncryptingStream(crypt, out)) 
        {
            IOUtils.copy(in, encryptingStream);
        }


我的想法,为什么 AmazonS3 需要 XML 文件? 为什么不是普通的文本文档?
是否可以使用存储桶策略更改此选项?

编辑
那是上传代码,可能有问题。 我不明白为什么它在没有加密的情况下工作。

             File uploaffile = encryptFile(file);
             List<PartETag> partETags = new ArrayList<PartETag>();
             String filename = String.valueOf(System.currentTimeMillis());

             InitiateMultipartUploadRequest initRequest = new InitiateMultipartUploadRequest(awss3bucket, filename);
             InitiateMultipartUploadResult initResponse = amazons3.initiateMultipartUpload(initRequest);
             long partSize = 5 * 1024 * 1024; 
             long contentLength = uploaffile.length();
             long filePosition = 0;
             for (int i = 1; filePosition < contentLength; i++) {
                 partSize = Math.min(partSize, (contentLength - filePosition));

                 UploadPartRequest uploadRequest = new UploadPartRequest()
                         .withBucketName(awss3bucket)
                         .withKey(filename)
                         .withUploadId(initResponse.getUploadId())
                         .withPartNumber(i)
                         .withFileOffset(filePosition)
                         .withFile(uploaffile)
                         .withPartSize(partSize);

                 PartETag petag = new PartETag(amazons3.uploadPart(uploadRequest).getPartNumber(), amazons3.uploadPart(uploadRequest).getETag());
                 partETags.add(petag);

                 filePosition += partSize;
             }

             CompleteMultipartUploadRequest compRequest = new CompleteMultipartUploadRequest(awss3bucket, filename,
                                                                                            initResponse.getUploadId(), partETags);

             amazons3.completeMultipartUpload(compRequest);

也许下次我应该停下来从互联网上复制一些随机代码。
您使用 FileoutputStream 不以其他方式编写。 所以文件是空的,它创建了异常。

        CryptoInputStream<KmsMasterKey> encryptingStream = crypto.createEncryptingStream(crypt, in);
        FileOutputStream out = null;

        try {
            out = new FileOutputStream(encryptfile);
            IOUtils.copy(encryptingStream, out);
            encryptingStream.close();
            out.close();
        } catch (IOException e) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM