簡體   English   中英

如何將兩個base64串合為一個

[英]How to combine two base64 strings into one

我從以 base64 字符串表示的外部系統獲取文件。 這些文件有多種格式:docx、pdf、jpg 等。大多數時候,我將它們作為一個 base64 字符串獲取。 在這種情況下,我可以將它們轉換回二進制文件。 有時,由於上述系統的一些限制,我得到的文件是兩個或多個 base64 字符串。 那么,我應該如何將它們連接到一個 bytes[] 數組中呢?

public static byte[] Join64Strings(string[] base64Strings)
{
    var bytes = new List<byte>();
    foreach (var base64String in base64Strings)
    {
        bytes.AddRange(Convert.FromBase64String(base64String));
    }
    return bytes.ToArray();
}

如果我在 base64Strings 數組中有一個元素,它就可以工作。 問題出在不止一個元素上。 然后文件被寫入

File.WriteAllBytes

已損壞。 我認為問題在於終止 =(等號)出現在數組中所有字符串的末尾。 也許他們需要以某種特殊的方式處理。

我應該將它們加入一個字節數組嗎?否

直接合並工作的機會是可變的(大多數不是)

除非每個文件都是部分文件(見下文),否則文件填充的 =(大部分但不是全部)結尾應該是幾個指示之一,表明每個文件都是一個謹慎的文件 object(理想情況下每個文件都應該有一個要轉換的名稱否則你不知道 mime 文件類型(回復應該指出你是否需要保存為多個 jpeg docx 或 pdf)

因此,通常不可能將 jpeg 與 pdf 混合為 docx,這應該會引發檢測到的 klaxon 的抗病毒行為。

Base64 基於將 3 個字節的塊轉換為 4 個字節,因此如果組合文件在 3 個字節的邊界上正確拆分,它們可以簡單地連接為一個。

為此你會認為好吧,我將 base64 除以 4 以計算出 3 的塊,但是如果源塊是 1024(或其他常見的二進制除法),則不會被編碼為 3,因為會有余數需要一些填充最后一個片段(通常是=字符。)

因此,添加 base64 塊的答案是第一個反轉以分離字節流,然后連接字節塊以形成整個字節流。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM