如何将文件上传到SOAP Web服务?

时间:2012-09-24 19:31:06

标签: java web-services soap upload

我有一个.p12文件,我想上传到SOAP Web服务,以便我的应用程序可以发出请求以便以后获取它。如何上传此文件?

我不一定想在我的应用程序代码中使用它,因为它只是我想做的一次。但是,如果重要的话,我正在使用Java。

3 个答案:

答案 0 :(得分:2)

如果服务支持,你应该看看MTOM。如果它接受文件附件,那么它可能使用MTOM。通过将其保留在应用程序代码之外不确定您的意思,但是如何创建和发送附件取决于您正在使用的Web服务平台。以下是有关在Java的JAX-WS中发送附件的最新文档:

http://metro.java.net/guide/ch06.html#binary-attachments-mtom

如果您想以与语言无关的方式查看实际发生的情况,请抓住SoapUI并将其设置为使用MTOM发送附件:

http://www.soapui.org/SOAP-and-WSDL/adding-headers-and-attachments.html

答案 1 :(得分:0)

将文件作为流读取并通过网络发送。就是这样。

答案 2 :(得分:0)

在服务器端发送编码字符串和Base64.decode文件字符串

String strAttachmentCoded = "";
private int PICK_PDF_REQUEST = 1;
Uri filePath;

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == PICK_PDF_REQUEST && resultCode == Activity.RESULT_OK && data != null && data.getData() != null) {
        filePath = data.getData();
        File uploadFile = new File(filePath.toString());
        URI uri = URI.create(uploadFile.getPath());
        try {
            if (uploadFile != null) {
                File uploadFile1 = new File(uri);
                FileInputStream objFileIS = new FileInputStream(uploadFile1);
                ByteArrayOutputStream objByteArrayOS = new ByteArrayOutputStream();
                byte[] byteBufferString = new byte[1024];
                int readNum;
                readNum = objFileIS.read(byteBufferString);
                while (readNum != -1) {
                    Log.v("  ", "" + readNum);
                    objByteArrayOS.write(byteBufferString, 0, readNum);
                    //                system.out.println("read " + readNum + " bytes,");
                    readNum = objFileIS.read(byteBufferString);
                }
                byte[] byteBinaryData = Base64.encode(objByteArrayOS.toByteArray(), Base64.DEFAULT);
                strAttachmentCoded = String.valueOf(byteBinaryData);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}