Pentaho - 使用 API 上传文件
Pentaho - upload file using API
我需要使用 API.
上传文件
我尝试了 REST CLIENT,但没有找到任何选项。
尝试使用 HTTP POST 并以 415 响应。
请建议如何完成此操作
错误 415 是“不支持的媒体类型”。
您可能需要更改请求的媒体类型或检查远程服务器是否接受了该类型的文件。
我使用 http://www.dietz-solutions.com/2017/06/pentaho-data-integration-multi-part.html
中的解决方案解决了这个问题
谢谢本。
他为 Multi-part 表单提交写了 Java class。我通过为授权添加 header 来扩展...
此解决方案仅使用 jre 7 的标准 类。在您的转换中添加一个步骤 Modified Java Script Value
。您必须在流程中添加两列:URL_FORM_POST_MULTIPART_COLUMN
和 FILE_URL_COLUMN
,您可以根据需要添加任意数量的文件,只需多次调用 outputStreamToRequestBody.write
。
try
{
//in this step you will need to add two columns from the previous flow -> URL_FORM_POST_MULTIPART_COLUMN, FILE_URL_COLUMN
var serverUrl = new java.net.URL(URL_FORM_POST_MULTIPART_COLUMN);
var boundaryString = "999aaa000zzz09za";
var openBoundary = java.lang.String.format("\n\n--%s\nContent-Disposition: form-data\nContent-Type: text/xml\n\n" , boundaryString);
var closeBoundary = java.lang.String.format("\n\n--%s--\n", boundaryString);
// var netIPSocketAddress = java.net.InetSocketAddress("127.0.0.1", 8888);
// var proxy = java.net.Proxy(java.net.Proxy.Type.HTTP , netIPSocketAddress);
// var urlConnection = serverUrl.openConnection(proxy);
var urlConnection = serverUrl.openConnection();
urlConnection.setDoOutput(true); // Indicate that we want to write to the HTTP request body
urlConnection.setRequestMethod("POST");
//urlConnection.addRequestProperty("Authorization", "Basic " + Authorization);
urlConnection.addRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundaryString);
var outputStreamToRequestBody = urlConnection.getOutputStream();
outputStreamToRequestBody.write(openBoundary.getBytes(java.nio.charset.StandardCharsets.UTF_8));
outputStreamToRequestBody.write(java.nio.file.Files.readAllBytes(java.nio.file.Paths.get(FILE_URL_COLUMN)));
outputStreamToRequestBody.write(closeBoundary.getBytes(java.nio.charset.StandardCharsets.UTF_8));
outputStreamToRequestBody.flush();
var httpResponseReader = new java.io.BufferedReader(new java.io.InputStreamReader(urlConnection.getInputStream()));
var lineRead = "";
var finalText = "";
while((lineRead = httpResponseReader.readLine()) != null) {
finalText += lineRead;
}
var status = urlConnection.getResponseCode();
var result = finalText;
var time = new Date();
}
catch(e)
{
Alert(e);
}
我需要使用 API.
上传文件我尝试了 REST CLIENT,但没有找到任何选项。 尝试使用 HTTP POST 并以 415 响应。
请建议如何完成此操作
错误 415 是“不支持的媒体类型”。 您可能需要更改请求的媒体类型或检查远程服务器是否接受了该类型的文件。
我使用 http://www.dietz-solutions.com/2017/06/pentaho-data-integration-multi-part.html
中的解决方案解决了这个问题谢谢本。
他为 Multi-part 表单提交写了 Java class。我通过为授权添加 header 来扩展...
此解决方案仅使用 jre 7 的标准 类。在您的转换中添加一个步骤 Modified Java Script Value
。您必须在流程中添加两列:URL_FORM_POST_MULTIPART_COLUMN
和 FILE_URL_COLUMN
,您可以根据需要添加任意数量的文件,只需多次调用 outputStreamToRequestBody.write
。
try
{
//in this step you will need to add two columns from the previous flow -> URL_FORM_POST_MULTIPART_COLUMN, FILE_URL_COLUMN
var serverUrl = new java.net.URL(URL_FORM_POST_MULTIPART_COLUMN);
var boundaryString = "999aaa000zzz09za";
var openBoundary = java.lang.String.format("\n\n--%s\nContent-Disposition: form-data\nContent-Type: text/xml\n\n" , boundaryString);
var closeBoundary = java.lang.String.format("\n\n--%s--\n", boundaryString);
// var netIPSocketAddress = java.net.InetSocketAddress("127.0.0.1", 8888);
// var proxy = java.net.Proxy(java.net.Proxy.Type.HTTP , netIPSocketAddress);
// var urlConnection = serverUrl.openConnection(proxy);
var urlConnection = serverUrl.openConnection();
urlConnection.setDoOutput(true); // Indicate that we want to write to the HTTP request body
urlConnection.setRequestMethod("POST");
//urlConnection.addRequestProperty("Authorization", "Basic " + Authorization);
urlConnection.addRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundaryString);
var outputStreamToRequestBody = urlConnection.getOutputStream();
outputStreamToRequestBody.write(openBoundary.getBytes(java.nio.charset.StandardCharsets.UTF_8));
outputStreamToRequestBody.write(java.nio.file.Files.readAllBytes(java.nio.file.Paths.get(FILE_URL_COLUMN)));
outputStreamToRequestBody.write(closeBoundary.getBytes(java.nio.charset.StandardCharsets.UTF_8));
outputStreamToRequestBody.flush();
var httpResponseReader = new java.io.BufferedReader(new java.io.InputStreamReader(urlConnection.getInputStream()));
var lineRead = "";
var finalText = "";
while((lineRead = httpResponseReader.readLine()) != null) {
finalText += lineRead;
}
var status = urlConnection.getResponseCode();
var result = finalText;
var time = new Date();
}
catch(e)
{
Alert(e);
}