在Java中编码base64并在C#中解码

2024-01-07

我必须将文件发送到我的 Web 服务,但 Web 服务假定该文件(字节数组)为 base64Binary。

在编码之前,byteArrayFile 作为常规文件保存在磁盘上。 (我这样做只是为了测试)

因此,在我的 Web 服务 Java 客户端中,我以这种方式发送信息:

String file = new sun.misc.BASE64Encoder().encode(byteArrayFile);
port.sendFileToWebService(file);

Web 服务必须解码信息并将接收到的文件保存在磁盘上。

    [WebMethod]
    public string sendFileToWebService(string file)
    {

        string dirname = HttpContext.Current.Request.PhysicalApplicationPath + "\\Attachments\\";
        if (!System.IO.Directory.Exists(dirname))
        {
            System.IO.Directory.CreateDirectory(dirname);
        }
        string filename = dirname + "/" + "file.sim";
        WebClient myWebClient = new WebClient();
        myWebClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
        byte[] byteArray = null;

        byteArray = Convert.FromBase64String(file.Replace("\n", ""));

        byte[] responseArray = myWebClient.UploadData(filename, "POST", byteArray);
        return "Webservice says OK";
    }

问题是:

保存在磁盘上的文件(编码前)和用 C# 解码的文件不相等。 不知道是Java编码的问题还是C#解码的问题。

任何建议,包括更改文件类型或逻辑过程,都将受到赞赏。

提前致谢!

编辑 - 文件比较:

原始文件http://img819.imageshack.us/img819/820/originalu.png http://img819.imageshack.us/img819/820/originalu.png

解码文件(Java编码后)http://img826.imageshack.us/img826/3184/processed.png http://img826.imageshack.us/img826/3184/processed.png


我知道 XSD 标准指定了一种称为base64二进制 http://www.w3.org/TR/xmlschema11-2/#base64Binary。这应该允许什么,是你的[WebMethod]参数为byte[]。然后底层服务栈会将字节数组编码为base64字符串。

例如,我刚刚做了一个像这样的快速Java服务

   @WebMethod(operationName = "TestByteArray")
    public void testByteArray(byte[] data) {

    }

生成的 WSDL 的相关部分如下所示:

<operation name="TestByteArray">
    <input wsam:Action="jordan.services/EncodingTests/TestByteArrayRequest" message="tns:TestByteArray"/>
    <output wsam:Action="jordan.services/EncodingTests/TestByteArrayResponse" message="tns:TestByteArrayResponse"/>
</operation>

And

<xs:complexType name="TestByteArray">
    <xs:sequence>
        <xs:element name="arg0" type="xs:base64Binary" nillable="true" minOccurs="0"/>
    </xs:sequence>
</xs:complexType>

我也在.Net中做了测试:

[WebMethod]
public void testByteArray(byte[] bytes) {
}

生成的 WSDL 的相关部分:

<wsdl:portType name="TestWSSoap">
    <wsdl:operation name="testByteArray">
        <wsdl:input message="tns:testByteArraySoapIn"/>
        <wsdl:output message="tns:testByteArraySoapOut"/>
    </wsdl:operation>
</wsdl:portType>

And

<wsdl:types>
    <s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
        <s:element name="testByteArray">
            <s:complexType>
                <s:sequence>
                    <s:element minOccurs="0" maxOccurs="1" name="bytes" type="s:base64Binary"/>
                </s:sequence>
            </s:complexType>
        </s:element>
        <s:element name="testByteArrayResponse">
            <s:complexType/>
        </s:element>
    </s:schema>
</wsdl:types>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在Java中编码base64并在C#中解码 的相关文章

随机推荐

  • Android CardView 显示卡片周围的边框

    Android Cardview 在卡片周围显示不必要的边框 我尝试过不同的方法 但无法将其删除 当我为卡片提供自定义背景颜色时会发生这种情况 当我删除 cardBackgroundColor 并使用默认值时 那么不必要的边框就不可见了 我
  • gacutil.exe 的两个位置

    我正在 Windows 2008 R2 Server 64 位 上进行开发 我正在学习如何使用 gacutil exe 我找到了该文件的两个副本 C Program Files Microsoft SDKs Windows v6 0A Bi
  • 如何在java中创建临时文件而不在文件名后附加随机数?

    我需要创建一个临时文件 所以我尝试了以下方法 String TempFiles c1234c10 c1234c11 c1234c12 c1234c13 for int i 0 i lt 3 i try String tempFile Tem
  • 如何将现有 Java 密钥库 (.jks) 文件导入到 Java 安装中?

    所以 我在 LDAP 方面遇到了麻烦 我有一个集成测试用例 希望能够成功 但它目前遇到了 SSL 握手的 LDAPS 安全问题 我能够使用 Apache Directory Studio 连接到 LDAPS 并且它已将密钥库下载到文件 pe
  • endpoints.ServiceException 子类返回 400 状态代码而不是 409

    在云端点中文档 https developers google com appengine docs python endpoints exceptions对于异常处理 建议子类化endpoints ServiceException类提供自
  • 将 Boost 库添加到 OS X Eclipse 中的 C++ 项目

    我一直在尝试使用 eclipse 使用 boost 文件系统库来设置 C 项目 我跟着these http www technoboria com 2009 07 simple guide to installing boost on ma
  • ListFragment onItemClickListener 不起作用

    我正在使用选项卡式布局 带有滑动 这里我有 3 个由SectionsPagerAdapter 控制的选项卡 每个选项卡都是一个 ListFragment 现在我想在单击列表中的一项时触发一个事件 我想要每个选项卡都有一个监听器 现在是代码
  • 使用 fgets 从文件中读取

    我正在读取格式的文件 1 32 43 23 32 43 123 43 54 243 123 2222 2 这是我的代码片段 string 100 while feof fp fgets string 100 fp 现在 当我将每个字符串放入
  • Django 使用 kwargs 进行反向操作

    比如说 在我的注册类的 post 方法中 如果用户已经注册 我想将用户重定向到登录页面 这很简单 class Register View def post self request Some code to check if the ema
  • XTS 的日期有不同的来源。使用 R 计算 beta

    我对 R 有点陌生 我想我的错误对于有经验的人来说是微不足道的 我正在尝试编写一个 R 程序来计算许多股票的贝塔值 股票代码读取自Input csv 数据是从yahoo下载的 然后 代码循环执行每只股票的 beta 计算 并输出总结回归的
  • UITextView 带有“完成”按钮*和*“返回”键?

    我在 iPhone 应用程序中使用 UITextView 进行多行文本输入 并且已将 返回 键设置为显示 完成 我还设置了返回键来禁用第一响应者状态 以便点击 完成 实际上退出 UITextView 但是 我还希望用户能够在 UITextV
  • 如何编写在框中绘制文本/字符串的测试用例?

    我正在矩形框架中绘制字符串 绳子拉得很完美 现在我需要使用sentesting 套件编写测试用例 我不知道应该从哪里开始 为了寻求帮助 我还看到了iPhone 示例计算器应用程序 http developer apple com IPhon
  • 未找到视图或其主视图,或者没有视图引擎支持搜索的位置

    错误如下 未找到视图 LoginRegister 或其主视图 或者没有视图引擎支持搜索的位置 搜索了以下位置 视图 MyAccount LoginRegister aspx 视图 MyAccount LoginRegister ascx 视
  • 当在 gnu 屏幕中使用 vim 或 less 时,退出 vim 或 less 会留下挥之不去的印记

    在我的新 Ubuntu 系统上 我启动一个屏幕会话并在 vim 中编辑文件或在 less 中查看它 退出后 屏幕不会自行重绘 而只是向上滚动以在我刚刚在 vim 或更少中查看的所有内容下显示命令行 我怎样才能改变这个 以便退出 vim 会让
  • jQuery:如何在两个闭合的 html 标签之间选择文本

    我正在尝试使用 jQuery 将介绍 帮助文本包装在 html 文档中 它不在任何标签内 而是在两个闭合的 html 标签之间 例如 请参阅随附的代码片段 第二个结束标签也可以是除 p var txtHelp jQuery b page t
  • Django 缓存错误..即使禁用缓存

    我有一个 Django 网站 其中出现了一个奇怪的错误 在网站上 他们可以添加 出版物 这基本上与不同名称的博客文章相同 当他们修改现有帖子时 事情会变得很奇怪 他们首先在管理员中修改它 当他们访问网站时 更改不可见 就像旧版本被缓存一样
  • 是否可以隐藏系统栏

    我创建了一个启动器 以便在内部应用程序中使用它 出于某些安全原因 我想隐藏系统栏 对参数的访问和对已安装应用程序的访问的排序 但我不知道该怎么做 将使用的平板电脑未root 你能帮我吗 您无法隐藏它 但可以禁用它 但主页除外 为此 您可以将
  • R 中的网页抓取,“...当前工作目录中不存在”错误

    我正在尝试使用 XML2 包从 ESPN com 中抓取一些表格 举例来说 我想将第 7 周的梦幻四分卫排名抓取到 R 中 其 URL 为 http www espn com fantasy football story page 16ra
  • 如果我推送到已删除的分支会发生什么?

    我有一个 git 分支 被gitlab合并删除了 现在 发现了一个错误 我想继续在这个分支上工作 我重命名了它 但它仍然跟踪已删除的分支 它不知道 gitlab 删除了该分支 现在我很好奇 在这种情况下我该怎么办 如果我按原样推进会发生什么
  • 在Java中编码base64并在C#中解码

    我必须将文件发送到我的 Web 服务 但 Web 服务假定该文件 字节数组 为 base64Binary 在编码之前 byteArrayFile 作为常规文件保存在磁盘上 我这样做只是为了测试 因此 在我的 Web 服务 Java 客户端中