使用 Pentaho 中的用户定义 Java Class 将 pdf 加载到 S3

Load a pdf into S3 using User Defined Java Class in Pentaho

import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.PutObjectRequest;

import java.io.File;
import java.io.IOException;

public class UploadObject {

  public static void main(String[] args) throws IOException {

    Regions clientRegion = Regions.US_EAST_1;

    String fileObjKeyName = "N.pdf";

    String fileName = "C:\home\aws\N.pdf";

    //To Test the File Upload

    String accessKeyId = "AKIAZGSMNGVXXXZ73VXE";

    String secretAccessKey = "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";

    String bucketName = "fioprod-s3-addon-us-east-12";

    try {

      final BasicAWSCredentials basicAWSCredentials = new BasicAWSCredentials(accessKeyId, secretAccessKey);

      //This code expects that you have AWS credentials set up per:

      // https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html

      AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
          .withRegion(clientRegion)
          .withCredentials(new AWSStaticCredentialsProvider(basicAWSCredentials))
          .build();

      // Upload a file as a new object with ContentType and title specified.

      PutObjectRequest request = new PutObjectRequest(bucketName, fileObjKeyName, new File(fileName));

      ObjectMetadata metadata = new ObjectMetadata();

      metadata.setContentType("plain/text");

      metadata.addUserMetadata("title", "someTitle");

      request.setMetadata(metadata);

      s3Client.putObject(request);

    } catch (AmazonServiceException e) {

      // The call was transmitted successfully, but Amazon S3 couldn't process

      // it, so it returned an error response.

      e.printStackTrace();

    } catch (SdkClientException e) {

      // Amazon S3 couldn't be contacted for a response, or the client

      // couldn't parse the response from Amazon S3.

      e.printStackTrace();

    }

  }

}

当我从 IntelliJ IDE 运行 将 pdf 文件加载到 S3 时,上面的代码工作正常。我希望这段代码移动到 Pentaho“用户定义 Class”,当我这样做时它会抛出错误 - “导入 class “com.amazonaws.auth.AWSStaticCredentialsProvider” 无法加载”

我该如何解决?我的最终目标是使用 pentaho 将 .pdf 或 .zip 文件加载到 S3。

感谢您的宝贵时间。

您编写的代码很好,而且运行良好。您只需要将 aws-java-sdk jar 保存到您的 data-integration/lib 位置。

您可以从Here

下载sdk jar文件

您也可以从 Here 查看我的 KTR,我在其中包含了您的代码,并在 PDIUser-defined-java-class 中对您的代码进行了一些小的修改

import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.PutObjectRequest;

import java.io.File;
import java.io.IOException;

public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException{
    Object[] r = getRow();
 
 if (r == null) {
        setOutputDone();
        return false;
    }



    Regions clientRegion = Regions.US_EAST_1;

    String fileObjKeyName = "N.pdf";

    String fileName = "C:\home\aws\N.pdf";

    //To Test the File Upload

    String accessKeyId = "AKIAZGSMNGVXXXZ73VXE";

    String secretAccessKey = "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";

    String bucketName = "fioprod-s3-addon-us-east-12";
    

      final BasicAWSCredentials basicAWSCredentials = new BasicAWSCredentials(accessKeyId, secretAccessKey);

      //This code expects that you have AWS credentials set up per:

      // https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html

      AmazonS3 s3Client = (AmazonS3)AmazonS3ClientBuilder.standard().withRegion(clientRegion).withCredentials(new AWSStaticCredentialsProvider(basicAWSCredentials)).build();

      // Upload a file as a new object with ContentType and title specified.

      PutObjectRequest request = new PutObjectRequest(bucketName, fileObjKeyName, new File(fileName));

      ObjectMetadata metadata = new ObjectMetadata();

      metadata.setContentType("plain/text");

      metadata.addUserMetadata("title", "someTitle");

      request.setMetadata(metadata);

      s3Client.putObject(request);

   
    putRow(data.outputRowMeta, r);
     return true;

}