如何通过API为Qualtrics问卷提交同响应中的文件类问题答案?
解决Qualtrics API同时提交Likert响应+文件附件的问题
嘿,我刚好折腾过类似的Qualtrics+Unity提交需求,给你一步步拆解怎么搞定这个文件上传的问题!
核心关键点:你之前用CSV提交Likert响应的方式(一般是text/csv或application/json格式的请求)没法携带二进制文件,必须切换成**multipart/form-data格式的POST请求**,这样才能同时传递文本字段(Likert问题的选项)和文件附件。
具体步骤:
确认Qualtrics的关键信息
- 你的API密钥(要确保有「创建问卷响应」的权限)
- 目标问卷的ID
- 文件响应类问题的内部问题ID(在Qualtrics问卷编辑器里,找到该问题,查看「问题设置」里的ID,通常是
Qxx格式,比如Q2) - 你的Qualtrics数据中心URL(比如北美是
ca1.qualtrics.com,欧洲是eu1.qualtrics.com,替换成你自己的)
用UnityWebRequest构造Multipart请求
Unity里推荐用UnityWebRequest来处理多部分表单提交,下面是完整的示例代码,你可以直接改参数复用:using UnityEngine; using UnityEngine.Networking; using System.Collections.Generic; using System.IO; public class QualtricsSubmitter : MonoBehaviour { public string apiKey = "YOUR_QUALTRICS_API_KEY"; public string surveyId = "YOUR_SURVEY_ID"; public string dataCenterUrl = "https://ca1.qualtrics.com"; // 替换成你的数据中心 public void SubmitResponseWithFile() { StartCoroutine(SubmitCoroutine()); } private IEnumerator SubmitCoroutine() { // 构造API请求地址 string submitUrl = $"{dataCenterUrl}/API/v3/surveys/{surveyId}/responses"; // 创建Multipart表单容器 List<IMultipartFormSection> formSections = new List<IMultipartFormSection>(); // 1. 添加Likert问题的响应(示例:Q1对应选项值4) formSections.Add(new MultipartFormDataSection("Q1", "4")); // 如果有多个Likert问题,继续添加:formSections.Add(new MultipartFormDataSection("Q3", "2")); // 2. 添加文件附件(示例:读取Unity持久化路径下的engagement_data.csv) string filePath = Path.Combine(Application.persistentDataPath, "engagement_data.csv"); if (File.Exists(filePath)) { byte[] fileBytes = File.ReadAllBytes(filePath); // 第一个参数是Qualtrics文件问题的ID,第二个是文件名,第三个是MIME类型,第四个是文件字节 formSections.Add(new MultipartFormFileSection("Q2", "engagement_data.csv", "text/csv", fileBytes)); } else { Debug.LogError("找不到要上传的文件:" + filePath); yield break; } // 创建POST请求 UnityWebRequest request = UnityWebRequest.Post(submitUrl, formSections); // 添加API密钥头 request.SetRequestHeader("X-API-TOKEN", apiKey); // 发送请求并等待结果 yield return request.SendWebRequest(); // 处理响应 if (request.result != UnityWebRequest.Result.Success) { Debug.LogError($"提交失败:{request.error}\n响应内容:{request.downloadHandler.text}"); } else { Debug.Log("响应提交成功!Qualtrics返回:" + request.downloadHandler.text); } } }关键注意事项
- 一定要用文件问题的内部ID作为文件字段名,不能用问题的显示标题,不然Qualtrics识别不到。
- 文件大小别超Qualtrics的限制(一般单文件不超过10MB)。
- 确保你的API密钥有足够权限:在Qualtrics的「用户设置」→「API密钥」里,确认该密钥关联的角色有「创建响应」的权限。
- 如果测试时遇到错误,直接打印Qualtrics返回的
downloadHandler.text,里面会有具体的错误原因(比如字段名不对、权限不足)。
为什么之前的CSV方式不行?
纯CSV或JSON格式的请求只能传递文本类型的键值对,无法携带二进制文件数据。multipart/form-data是HTTP专门用来混合传递文本字段和文件附件的格式,刚好适配Qualtrics的需求。
内容的提问来源于stack exchange,提问作者Vipin Verma
相关产品推荐
相关产品推荐

