Pentaho-使用API上载文件

Pentaho-使用API上载文件,pentaho,pdi,spoon,Pentaho,Pdi,Spoon,我需要上传一个使用API的文件 我尝试了REST客户端,但没有找到任何选项。 尝试了HTTP POST,但得到了415的响应 请建议如何完成此操作。错误415为“不支持的媒体类型”。 您可能需要更改请求的媒体类型,或者检查远程服务器是否接受该类型的文件 错误415是“不支持的媒体类型”。 您可能需要更改请求的媒体类型,或者检查远程服务器是否接受该类型的文件 我通过使用来自 谢谢你,本 他为多部分表单提交编写了一个Java类。我通过添加用于授权的标题来扩展…我通过使用来自的解决方案解决了这个问题

我需要上传一个使用API的文件

我尝试了REST客户端,但没有找到任何选项。 尝试了HTTP POST,但得到了415的响应


请建议如何完成此操作。错误415为“不支持的媒体类型”。 您可能需要更改请求的媒体类型,或者检查远程服务器是否接受该类型的文件


错误415是“不支持的媒体类型”。 您可能需要更改请求的媒体类型,或者检查远程服务器是否接受该类型的文件


我通过使用来自

谢谢你,本


他为多部分表单提交编写了一个Java类。我通过添加用于授权的标题来扩展…

我通过使用来自的解决方案解决了这个问题

谢谢你,本


他为多部分表单提交编写了一个Java类。我通过为授权添加一个头来进行扩展…

此解决方案仅使用jre 7的标准类。在转换中添加步骤
修改的Java脚本值
。您必须在流中添加两列:
URL\u FORM\u POST\u MULTIPART\u COLUMN
FILE\u URL\u COLUMN
,您可以添加任意数量的文件,您只需调用
outputStreamToRequestBody即可。编写
更多次

    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);
    }

此解决方案仅使用jre 7的标准类。在转换中添加步骤
修改的Java脚本值
。您必须在流中添加两列:
URL\u FORM\u POST\u MULTIPART\u COLUMN
FILE\u URL\u COLUMN
,您可以添加任意数量的文件,您只需调用
outputStreamToRequestBody即可。编写
更多次

    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);
    }

我确实将内容类型设置为多部分/表单数据,但得到了相同的响应。在与邮递员核对时,我删除了contentttype的标题,它可以上传。如果我没有设置内容类型,它会自动将其设置为Text/xml。至少,如果我能让HTTPPOST不设置内容类型,它可能会很有用。此外,尽管这看起来很幼稚,但还有其他方法可以做到这一点吗?除了使用HTTPPOSI之外,它还将内容类型设置为多部分/表单数据,但得到了相同的响应。在与邮递员核对时,我删除了contentttype的标题,它可以上传。如果我没有设置内容类型,它会自动将其设置为Text/xml。至少,如果我能让HTTPPOST不设置内容类型,它可能会很有用。此外,尽管这看起来很幼稚,但还有其他方法可以做到这一点吗?除了使用HTTp post之外