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

如何通过API为Qualtrics问卷提交同响应中的文件类问题答案?

解决Qualtrics API同时提交Likert响应+文件附件的问题

嘿,我刚好折腾过类似的Qualtrics+Unity提交需求,给你一步步拆解怎么搞定这个文件上传的问题!

核心关键点:你之前用CSV提交Likert响应的方式(一般是text/csv或application/json格式的请求)没法携带二进制文件,必须切换成**multipart/form-data格式的POST请求**,这样才能同时传递文本字段(Likert问题的选项)和文件附件。

具体步骤:

  1. 确认Qualtrics的关键信息

    • 你的API密钥(要确保有「创建问卷响应」的权限)
    • 目标问卷的ID
    • 文件响应类问题的内部问题ID(在Qualtrics问卷编辑器里,找到该问题,查看「问题设置」里的ID,通常是Qxx格式,比如Q2)
    • 你的Qualtrics数据中心URL(比如北美是ca1.qualtrics.com,欧洲是eu1.qualtrics.com,替换成你自己的)
  2. 用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);
            }
        }
    }
    
  3. 关键注意事项

    • 一定要用文件问题的内部ID作为文件字段名,不能用问题的显示标题,不然Qualtrics识别不到。
    • 文件大小别超Qualtrics的限制(一般单文件不超过10MB)。
    • 确保你的API密钥有足够权限:在Qualtrics的「用户设置」→「API密钥」里,确认该密钥关联的角色有「创建响应」的权限。
    • 如果测试时遇到错误,直接打印Qualtrics返回的downloadHandler.text,里面会有具体的错误原因(比如字段名不对、权限不足)。

为什么之前的CSV方式不行?

纯CSV或JSON格式的请求只能传递文本类型的键值对,无法携带二进制文件数据。multipart/form-data是HTTP专门用来混合传递文本字段和文件附件的格式,刚好适配Qualtrics的需求。

内容的提问来源于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.22 09:37:08