You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中用C#向SmartFile上传文件出现415错误求助

解决Unity上传文件时的415 Unsupported Media Type错误

嘿,这个415错误说白了就是服务器不认你发过去的数据格式,咱们来揪揪代码里的问题:

你当前的代码只是把文件路径字符串通过AddField当成普通表单字段传了过去,完全没把实际的文件内容(二进制数据)发给服务器。SmartFile这类文件上传服务需要的是文件本身的内容,而不是一个路径文本,服务器自然就返回“不支持的媒体类型”错误了。

正确的实现方式

要上传文件,你需要读取文件的二进制数据,然后用表单的二进制数据字段来提交。这里分两种写法,一种是兼容旧版Unity的WWW方式,另一种是官方推荐的UnityWebRequest方式:

方式1:使用WWW(旧版兼容)

WWWForm fileForm = new WWWForm();
string[] files = Directory.GetFiles(".", "*.txt");
// 先判断是否找到文件,避免数组越界
if (files.Length > 0)
{
    // 读取目标文件的二进制内容
    byte[] fileBytes = File.ReadAllBytes(files[0]);
    // 把二进制数据添加到表单,指定字段名、数据、文件名和MIME类型
    fileForm.AddBinaryData(
        "file", 
        fileBytes, 
        Path.GetFileName(files[0]), 
        "text/plain" // TXT文件对应的MIME类型
    );
    
    WWW www = new WWW("https://file.ac/xySSFOicMMk", fileForm);
    // 用协程等待上传完成(WWW是异步操作,不能直接同步等待)
    StartCoroutine(HandleUploadResult(www));
}

// 处理上传结果的协程
IEnumerator HandleUploadResult(WWW www)
{
    yield return www;
    
    if (!string.IsNullOrEmpty(www.error))
    {
        Debug.LogError($"上传出错:{www.error}");
    }
    else
    {
        Debug.Log($"上传成功,服务器返回:{www.text}");
    }
}

方式2:使用UnityWebRequest(官方推荐,替代WWW)

WWW在Unity 2017之后就被标记为弃用了,更推荐用UnityWebRequest来实现:

string[] files = Directory.GetFiles(".", "*.txt");
if (files.Length > 0)
{
    byte[] fileBytes = File.ReadAllBytes(files[0]);
    string fileName = Path.GetFileName(files[0]);
    
    // 创建表单数据段
    MultipartFormDataSection fileSection = new MultipartFormDataSection(
        "file", 
        fileBytes, 
        fileName, 
        "text/plain"
    );
    
    // 创建POST请求
    UnityWebRequest uploadRequest = UnityWebRequest.Post(
        "https://file.ac/xySSFOicMMk", 
        new List<IMultipartFormSection> { fileSection }
    );
    
    // 发送请求并等待结果
    yield return uploadRequest.SendWebRequest();
    
    if (uploadRequest.result != UnityWebRequest.Result.Success)
    {
        Debug.LogError($"上传失败:{uploadRequest.error}");
    }
    else
    {
        Debug.Log($"上传完成,服务器响应:{uploadRequest.downloadHandler.text}");
    }
}

关键要点总结

  • 上传文件必须传递文件的二进制数据,而不是文件路径字符串
  • 要设置正确的MIME类型(比如TXT文件用text/plain,图片用image/png等),帮助服务器识别文件类型
  • 异步操作必须用协程或者回调处理,不能直接同步阻塞主线程

内容的提问来源于stack exchange,提问作者Vipin Verma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:50:52