graphql - 通过 Monday.com API 使用 ColdFusion 添加文件时出现问题

标签 graphql coldfusion multipartform-data cfhttp monday.com

我一直在使用 Monday API,并在使其准备好在我们的系统和我们使用的其他一些工具中可用方面取得了很大进展,但是,当我遇到一些障碍时涉及到添加文件。我已经能够做其他所有事情,从添加项目、更新、专栏、看板到阅读我需要的内容,但添加文件最终让我崩溃。我的代码基于 Uploading a file to monday.com, the hard way 。作者使用的是 NodeJS,所以我尽力对其进行转换。 我的代码如下:

<cfset dataQuery = 'mutation ($file:File!) {add_file_to_column (item_id: 123456789, column_ID: file, file: $file){id}}'>
<cfset boundary = "xxxxxxxxxx">
<cfset upfile = "image1.png">
<cfset base64Sample = SAMPLE_BASE64_STRING>
<cfset data = "">

<!--- Construct Query --->
<cfset data &= "--" & boundary & "#chr(13)##chr(10)#">
<cfset data &= 'Content-Disposition: form-data; name="query"#chr(13)##chr(10)##chr(13)##chr(10)#'>
<cfset data &= dataQuery & '#chr(13)##chr(10)#'>
<cfset data &= "--" & boundary & "#chr(13)##chr(10)#">

<!--- Construct File --->
<cfset data &= 'Content-Disposition: form-data; name="variables[file]"; filename="' & upfile & '";#chr(13)##chr(10)#'>
<cfset data &= "Content-Type:application/octet-stream;#chr(13)##chr(10)##chr(13)##chr(10)#">
<cfset data &= ToString(ToBinary(base64Sample))>
<cfset data &= "#chr(13)##chr(10)#--" & boundary & "--#chr(13)##chr(10)#">

<cfdump var="#data#">
<cfhttp method="post" url="https://api.monday.com/v2" result="result">
    <cfhttpparam type="Header" name="Content-Type" value="multipart/form-data; boundary=#boundary#">
    <cfhttpparam type="Header" name="Authorization"  value="#mondayLogin.Token#">
    <cfhttpparam type="body" value="#data#">
</cfhttp>

当我试图让它工作时,格式发生了一点变化,但无论我做什么,它总是给我相同的错误消息:“不存在查询字符串”。

我希望这里对多部分边界和 Monday API 有更多了解的人可以提供帮助。

编辑:我将 \r\n 更改为 chr(13)chr(10),但仍然遇到相同的错误。

编辑 2:经过更多的重构后,我似乎已经克服了第一个错误,现在我遇到了 2 个与 GraphQL 相关的新错误,我认为。

  • 字段“add_file_to_column”缺少必需参数:column_id
  • 字段“add_file_to_column”不接受参数“column_ID” 我确信我仍然在某个地方格式化错误,但我还不知道那在哪里。

编辑3:原来我的列名是错误的。 “ID”不应大写,而应为“column_id”。我现在收到另一个新错误:内部服务器错误 (500)

最佳答案

所以我遇到了很多问题,有很多不同的错误消息。基本上我有 3 个问题:

  1. 将我的 \r\n 替换为 chr(13)chr(10) 的正确 ColdFusion 值
  2. 根据文档,查询的格式不正确
  3. ColdFusion 在编译时对单引号 (') 和双引号 (") 的处理方式有所不同。一旦我转义了双引号并删除了单引号,我就能让它正常工作。下面是我的工作演示。
<cfset dataQuery = "mutation ($file:File!) {add_file_to_column (item_id: 123456789, column_id: files, file: $file){id}}">
<cfset boundary = "xxxxxxxxxx">
<cfset upfile = "image1.png">
<cfset base64Sample = "SAMPLE_BASE64_IMAGE">
<cfset data = "">
<cfset cflf = "#chr(13)##chr(10)#">

<!--- Construct Query --->
<cfset data &= "--" & boundary & "#cflf#">
<cfset data &= 'Content-Disposition: form-data; name="query"#cflf##cflf#'>
<cfset data &= dataQuery & '#cflf#'>
<cfset data &= "--" & boundary & "#cflf#">

<!--- Construct File --->
<cfset data &= "Content-Disposition: form-data; name=""variables[file]""; filename=""#upfile#"";#cflf#">
<cfset data &= "Content-Type:application/octet-stream;#cflf##cflf#">
<cfset data &= ToString(ToBinary(base64Sample))>
<cfset data &= "#cflf#" &"--" & boundary & "--">

<cfdump var="#data#">
<cfhttp method="post" url="https://api.monday.com/v2/file" result="result">
    <cfhttpparam type="Header" name="Content-Type" value="multipart/form-data; boundary=#boundary#">
    <cfhttpparam type="Header" name="Authorization"  value="API_KEY_HERE">
    <cfhttpparam type="body" value="#data#">
</cfhttp>

<cfset returnStruct = DeserializeJSON(result.filecontent)>

<cfdump var="#returnStruct#">

关于graphql - 通过 Monday.com API 使用 ColdFusion 添加文件时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71641641/

相关文章:

validation - 如何以 ColdFusion 形式验证整数和范围?

coldfusion - Railo Query of Query 返回错误结果

html - SQL 查询内联表,打印到 HTML <select> 标签

javascript - 将自定义 header 添加到 Content-disposition 旁边的 FormData/multipart

javascript - Node.js 文件上传(Express 4、MongoDB、GridFS、GridFS-Stream)

jquery - 我们如何通过Jquery从MVC中的FormData映射c#复杂列表对象

javascript - 从 AsyncStorage 检索 JWT 以使用 ApolloClient 创建 httpLink 中间件时出现问题

javascript - Express GraphQL 必须提供查询字符串。

java - GraphQL 作为聚合器服务?

使用 prisma 和 graphql 测试流程