Отправить необработанный png байт [] с помощью сообщения GetRawTextureData с AddBinaryData: нет данных - PullRequest
0 голосов
/ 01 февраля 2020

Я отправляю на сервер необработанный байт [] текстуры, но в базе данных sql отображается 5B, и когда эти данные загружаются, файл пуст. Можете ли вы предоставить руководство?

Я отправляю на сервер необработанный байт [] текстуры примерно так:

byte [] imgByte0 = uploadedTex.GetRawTextureData();//uploadTex is Texture2D
Debug.Log("Byte Len " + imgByte0.Length);//results in 722160
WWWForm form = new WWWForm();;
form.AddBinaryData("rgbImgBytes", imgByte0, "image/png");
UnityWebRequest www = UnityWebRequest.Post("https:address.php", form);
yield return www.SendWebRequest();
Я отправляю его на php и вставляю в sql базу данных BLOB (я знаю, что есть другие предпочтительные альтернативы для хранения изображений, imgs / будут достаточно маленькими, не вопрос здесь ):

$thisRGBImg=$_FILES['rgbImgBytes'];
$stmt = $conn->prepare("INSERT INTO $imageTable `thisRGBImg` VALUES (?)");
$stmt->execute([$thisRGBImg];

Размер изображения PNG составляет 300 КБ, однако он отображается как 5B, хранящийся в BLOB-базе данных sql. Я также подтверждаю, когда я загружаю эти необработанные байты в файл (в соответствии с https://thoughtbot.com/blog/avoiding-out-of-memory-crashes-on-mobile#streams-to-the-rescue ), и полученный файл пуст:

using (UnityWebRequest myWebRequest = UnityWebRequest.Post(path, formData2))
{
  myWebRequest.downloadHandler = new ToFileDownloadHandler(new byte[64 * 1024], savePathWithFileName);
  yield return myWebRequest.SendWebRequest();
}
public ToFileDownloadHandler(byte[] buffer, string filepath) : base(buffer)
    {
        this.filepath = filepath;
        fileStream = new FileStream(filepath, FileMode.Create, FileAccess.Write);
    }
protected override bool ReceiveData(byte[] data, int dataLength)
    {
        if (data == null || data.Length < 1)
        {
            Debug.Log("ReceiveData - received a null/empty buffer");
            return false;
        }
        received += dataLength;
        Debug.Log("Data received " + dataLength + " total received " + received);
        //if (!canceled) fileStream.Write(data, 0, dataLength);//replaced  for bw below
        if (!canceled)
        {
            var bw = new BinaryWriter(File.Open("path", FileMode.OpenOrCreate));
            bw.Write(data);
            bw.Flush();
            bw.Close();
        }
        return true;
    }
...