这可能是由于AWS S3控制台创建的文件夹不是真正的文件夹,而是“伪文件夹”。要解决此问题,可以在Camel路由之前使用AWS SDK将“伪文件夹”转换为真正的文件夹。
以下是Java代码示例,演示如何使用AWS SDK将S3中的“伪文件夹”转换为真正的文件夹:
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.CopyObjectRequest;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.S3ObjectSummary;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.aws.s3.S3Constants;
import org.apache.camel.impl.DefaultCamelContext;
public class S3RouteBuilder extends RouteBuilder {
private final AmazonS3 s3Client = AmazonS3ClientBuilder.defaultClient();
public static void main(String[] args) throws Exception {
DefaultCamelContext context = new DefaultCamelContext();
context.addRoutes(new S3RouteBuilder());
context.start();
Thread.sleep(5000);
context.stop();
}
@Override
public void configure() {
from("aws-s3://my-bucket?amazonS3Client=#s3Client&autoCreateBucket=true&prefix=my-folder/")
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
S3ObjectSummary obj = exchange.getIn().getBody(S3ObjectSummary.class);
// Check if current object is a 'pseudo-folder'
if (obj.getKey().endsWith("/")) {
String folderName = obj.getKey().replaceFirst("^my-folder/", "");
// Copy the object to a dummy key with content type as 'application/x-directory'
CopyObjectRequest copyObjRequest = new CopyObjectRequest(
obj.getBucketName(),
obj.getKey(),
obj.getBucketName(),