如何使用UnityWebRequest在Unity中编写发送图像文件(.jpg/.png)的HTTP post?

如何使用UnityWebRequest在Unity中编写发送图像文件(.jpg/.png)的HTTP post?,http,unity3d,post,unitywebrequest,Http,Unity3d,Post,Unitywebrequest,我想使用UnityWebRequest在Unity中执行post请求。我必须发送一个jpg图像或png图像,api必须用字符串消息或int代码进行响应 如何编写C#脚本以通过post发送数据?请检查此方法。我使用此方法很长时间了,它对我很有效 public static IEnumerator CallAPIwithPostAndFileData1(string api_url, List<FileDetails> files, Action<string> callba

我想使用UnityWebRequest在Unity中执行post请求。我必须发送一个jpg图像或png图像,api必须用字符串消息或int代码进行响应


如何编写C#脚本以通过post发送数据?

请检查此方法。我使用此方法很长时间了,它对我很有效

public static IEnumerator CallAPIwithPostAndFileData1(string api_url, List<FileDetails> files, Action<string> callback)
{
    WWWForm form = new WWWForm();
    int i = 0;
    foreach (FileDetails file in files)
    {
        i++;
        UnityWebRequest localFile = UnityWebRequest.Get(@"file://" + file.filePath);
        yield return localFile;
        form.AddBinaryData("image[]", localFile.downloadHandler.data, file.fileName, "image/" + file.fileType);
    }

    UnityWebRequest request = UnityWebRequest.Post(api_url, form);
    request.SetRequestHeader("Content-Type", "application/json");
    request = APIHelper.setAuthToRequest(request, AuthType.BASIC);
    request.SendWebRequest();

    while (!request.isDone)
    {
        downloadProgress = request.downloadProgress * 100;
        yield return null;
    }

    if (request.isDone && (!request.isHttpError || !request.isNetworkError))
    {
        callback(request.downloadHandler.text);
    }
    else if (request.isHttpError || request.isNetworkError)
    {
        Debug.LogError(request.error);
    }
}
public静态IEnumerator CallAPIwithPostAndFileData1(字符串api\u url、列表文件、操作回调)
{
WWWForm form=新WWWForm();
int i=0;
foreach(文件中的文件详细信息文件)
{
i++;
UnityWebRequest localFile=UnityWebRequest.Get(@“file://“+file.filePath);
返回本地文件;
form.AddBinaryData(“image[]”,localFile.downloadHandler.data,file.fileName,“image/”+file.fileType);
}
UnityWebRequest=UnityWebRequest.Post(api\uURL,表单);
SetRequestHeader(“内容类型”、“应用程序/json”);
request=APIHelper.setAuthToRequest(请求,AuthType.BASIC);
request.SendWebRequest();
而(!request.isDone)
{
downloadProgress=request.downloadProgress*100;
收益返回空;
}
if(request.isDone&(!request.isHttpError | | |!request.isNetworkError))
{
回调(request.downloadHandler.text);
}
else if(request.ishttperor | | request.isNetworkError)
{
Debug.LogError(request.error);
}
}

FileDetails
这个类只保存一些必要的值,比如文件路径、文件名和文件类型。它有点太长了,如果你什么都不懂,请告诉我。

看看这个,我使用这个方法很长时间了,它对我很有效

public static IEnumerator CallAPIwithPostAndFileData1(string api_url, List<FileDetails> files, Action<string> callback)
{
    WWWForm form = new WWWForm();
    int i = 0;
    foreach (FileDetails file in files)
    {
        i++;
        UnityWebRequest localFile = UnityWebRequest.Get(@"file://" + file.filePath);
        yield return localFile;
        form.AddBinaryData("image[]", localFile.downloadHandler.data, file.fileName, "image/" + file.fileType);
    }

    UnityWebRequest request = UnityWebRequest.Post(api_url, form);
    request.SetRequestHeader("Content-Type", "application/json");
    request = APIHelper.setAuthToRequest(request, AuthType.BASIC);
    request.SendWebRequest();

    while (!request.isDone)
    {
        downloadProgress = request.downloadProgress * 100;
        yield return null;
    }

    if (request.isDone && (!request.isHttpError || !request.isNetworkError))
    {
        callback(request.downloadHandler.text);
    }
    else if (request.isHttpError || request.isNetworkError)
    {
        Debug.LogError(request.error);
    }
}
public静态IEnumerator CallAPIwithPostAndFileData1(字符串api\u url、列表文件、操作回调)
{
WWWForm form=新WWWForm();
int i=0;
foreach(文件中的文件详细信息文件)
{
i++;
UnityWebRequest localFile=UnityWebRequest.Get(@“file://“+file.filePath);
返回本地文件;
form.AddBinaryData(“image[]”,localFile.downloadHandler.data,file.fileName,“image/”+file.fileType);
}
UnityWebRequest=UnityWebRequest.Post(api\uURL,表单);
SetRequestHeader(“内容类型”、“应用程序/json”);
request=APIHelper.setAuthToRequest(请求,AuthType.BASIC);
request.SendWebRequest();
而(!request.isDone)
{
downloadProgress=request.downloadProgress*100;
收益返回空;
}
if(request.isDone&(!request.isHttpError | | |!request.isNetworkError))
{
回调(request.downloadHandler.text);
}
else if(request.ishttperor | | request.isNetworkError)
{
Debug.LogError(request.error);
}
}

FileDetails
这个类只保存一些必要的值,比如文件路径、文件名和文件类型。这有点太长了,如果你什么都不懂,请告诉我。

不要使用单个
UnityWebRequest
加载本地文件,而应该使用
MultipartFormFileSection
内部执行此操作。我将尝试使用此功能。谢谢你们两位!它对我起了作用,从那以后,我再也不看它了@Derhugoin在加载本地文件时,不要使用单独的
UnityWebRequest
,而应该使用内部执行此操作的
MultipartFormFileSection
,我将对此进行尝试。谢谢你们两位!它对我起了作用,从那以后,我再也不看它了@德胡戈