我一直在使用 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 个问题:
- 将我的
\r\n
替换为chr(13)chr(10)
的正确 ColdFusion 值 - 根据文档,查询的格式不正确
- 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/