【问题标题】:combine strings containing NULL合并包含 NULL 的字符串
【发布时间】:2016-01-08 10:38:19
【问题描述】:

我正在尝试使用 confluence REST API 将文件附加到 wiki 页面。我使用 VBA 在 excel 中生成各种图表并将它们保存为图像(当前为 png/jpeg)。

然后我在这里使用example 将文件作为附件上传到wiki。这种方法适用于文本文件,但是当我尝试使用图像时,我遇到了一些问题。特别是据我了解的代码:

sPostData = "--" & STR_BOUNDARY & vbCrLf & _
    "Content-Disposition: form-data; name=""uploadfile""; filename=""" & Mid$(sFileName, InStrRev(sFileName, "\") + 1) & """" & vbCrLf & _
    "Content-Type: application/octet-stream" & vbCrLf & vbCrLf & _
    sPostData & vbCrLf & _
    "--" & STR_BOUNDARY & "--"

尝试通过连接字符串将字符串边界添加到文件的二进制表示。我的问题是 png 的表示包含 NUL

‰PNG
SUB
NULNULNUL
IHDRNULNULEOT+NULNULSTXSYNBSETXNULNULSOH>&Ǽ      ...etc...

这会立即终止字符串,因此您会丢失文件的其余部分和最终的字符串边界。我相信这发生在 excel 中的所有字符串功能上。

我的问题是我应该如何将字符串边界附加到我的文件以避免这个问题?

提前致谢:)

【问题讨论】:

  • VBA 字符串不是以空字符结尾的,这意味着它们可以包含空字符,尽管这会导致字符串在调试器的某些部分被截断。
  • 噢!你完全正确,由于这种截断,我误诊了这个问题。

标签: vba null confluence-rest-api


【解决方案1】:

正如 Alex K. 指出的那样,我一直在错误的假设下工作。我对问题的分析中存在截断,而不是实际字符串。

问题实际上是由于我的错误 - 来自网站:

另一个需要注意的是 pvToByteArray 函数。原来发送 方法无法处理“byref”字节数组,因此例如传递 baBuffer 将失败,因为 VB6 设置了 VT_BYREF 位的类型 变体参数。

这是我对这部分代码的实现不正确 - 这导致了失败和错误消息

500:流意外结束

更正此问题后,问题似乎已解决。

再次感谢亚历克斯。

【讨论】:

    猜你喜欢
    • 2019-07-12
    • 1970-01-01
    • 2011-02-19
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    相关资源
    最近更新 更多