如何在 Unity C# 中使用 Dall-E 文本转图像 API 的 image
和 mask
参数?
背景信息如下,使用其他参数如 prompt
的方式是可行的(完整代码见 GitHub):
string apiMode = "generations";string apiUrl = "https://api.openai.com/v1/images/" + apiMode;UnityWebRequest www = UnityWebRequest.Post(apiUrl, "");www.SetRequestHeader("Content-Type", "application/json");www.SetRequestHeader("Authorization", "Bearer " + key);string jsonString = JsonConvert.SerializeObject(aiParams, Formatting.None, serializerSettings);www.uploadHandler = new UploadHandlerRaw(System.Text.Encoding.UTF8.GetBytes(jsonString));www.downloadHandler = new DownloadHandlerBuffer();yield return www.SendWebRequest();
然而,当使用 apiMode
为 “edits” 或 “variations” 时,根据 Dall-E 的文档,会返回一个 API 错误,建议切换到 “multipart/form-data” 内容类型。如何使用这种类型并添加 image
或 mask
的二进制数据,假设我们有一个 png 文件的 byte[]
?谢谢!
回答:
UnityWebRequest.Post
-> 接受 List<IMultipartFormSection>
的重载会自动使用此内容类型头,并且您可以提供 MultipartFormFileSection
和 MultipartFormDataSection
部分。
示例虽然无用,但可能会看起来像这样,例如:
var jsonString = JsonConvert.SerializeObject(aiParams, Formatting.None, serializerSettings); var jsonBytes = Encoding.UTF8.GetBytes(jsonString); var formParts = new List<IMultipartFormSection>(); formParts.Add(new MultipartFormDataSection("data", jsonBytes, "application/json")); formParts.Add(new MultipartFormFileSection("image", yourFileContentBytes, "YourFileName.png", "image/png")); using (UnityWebRequest www = UnityWebRequest.Post("https://www.my-server.com/myform", formParts)) { www.SetRequestHeader("Authorization", "Bearer " + key); yield return www.SendWebRequest(); if (www.result != UnityWebRequest.Result.Success) { Debug.Log(www.error); } else { Debug.Log("表单上传完成!"); } }