現在、レポートを BA/BI サーバー リポジトリ (URL: ***/api/repo/publish/file) にアップロードする必要がある Pentaho PDI プロジェクトに取り組んでいます。HTTP Post ステップと、リクエスト エンティティ フィールドを生成する User Defined Java Class ステップを使用して、これを実現したいと考えています。ただし、機能するコードを思い付くことができませんでした。私の上司は私が外部ライブラリを使用することを望んでいないので、私はケトルでデプロイされた org.apache.commons.httpclient クラスに固執しています。私のアプローチは、FilePart と StringParts を含む Part[] 配列を作成することです。次のステップは、ByteArrayOutputStream に書き込まれる MultipartRequestEntity を作成することです。
File filePart = new File(fileReport);FilePart fileUpload = new FilePart("fileUpload", filePart);
StringPart applyAclPermissions = new StringPart("applyAclPermissions","true");
StringPart overwriteAclPermissions = new StringPart("overwriteAclPermissions","true");
StringPart overwriteFile = new StringPart("overwriteFile", "true");
StringPart logLevel = new StringPart("logLevel","TRACE");
StringPart retainOwnership = new StringPart("retainOwnership", "false");
StringPart fileNameOverride = new StringPart("fileNameOverride","blablub.prpt");
StringPart importDir = new StringPart("importDir", "/public");
Part[] parts = {
fileUpload,
overwriteFile,
logLevel,
retainOwnership,
fileNameOverride,
importDir
};
HttpMethodParams params = new HttpMethodParams();
MultipartRequestEntity requestEntity = new MultipartRequestEntity(
parts, params
);
ByteArrayOutputStream bOutput = new ByteArrayOutputStream();
requestEntity.writeRequest(bOutput);
String requestEntityValue = new String(bOutput.toByteArray());
String contentType = requestEntity.getContentType();
String contentLength = String.valueOf(requestEntity.getContentLength());
Object[] outputRow = createOutputRow(r, data.outputRowMeta.size());
get(Fields.Out, "requestEntityValue").setValue(outputRow, requestEntityValue);
get(Fields.Out, "contentType").setValue(outputRow, contentType);
get(Fields.Out, "contentLength").setValue(outputRow, contentLength);
putRow(data.outputRowMeta, outputRow);
return true;
次のステップでは、HTTP Post ステップでデータが送信されます。ただし、サーバーはこのアプローチに満足していません。
私が間違っていることを知っていますか?
ご協力いただきありがとうございます!