本Tips介绍的是通过JavaScript给kintone的记录添加附件的方法。
如果可以通过JavaScript上传文件,那么就可以实现不同应用之间的连动。例如,可以按一下按钮就把应用A的附件添加到应用B里。
顺便一提,上传文件 API 不支持使用kintone.api() 发送 REST API 请求。(2014/04时确认的情况)
因此,本次通过XMLHttpRequest和CSRF令牌的方式上传文件。
为了让系统能够识别上传的文件是附件,需要预先在应用中添加附件字段。
开发步骤和流程
将文件设置为FormData格式
上传文件并获取其fileKey
关联获取到的fileKey和记录
用FormData准备好要上传的文件
首先,作为事前准备,需要把文件保存成FormData格式,以便通过HttpRequest形式发送。
将文件暂时保持成Blob格式后再设置成FormData格式。
创建Text文件
blob = new Blob(["测试文件"], { type: "text/plain" }); // 在FormData中保持文件 var formData = new FormData(); formData.append("__REQUEST_TOKEN__", kintone.getRequestToken()); formData.append("file", blob, "test.txt");
上传文件并获取fileKey
将文件上传到服务器,并接收其返回值中的fileKey。
※ 这里获取的fileKey不能用于文件下载。
上传时,将前面提到的FormData通过HttpReques发送。
上传文件 API 不支持使用 kintone.api() 发送 REST API 请求。 以下示例代码使用了XMLHttpRequest。
发送HttpRequest
var xmlHttp = new XMLHttpRequest(); xmlHttp.open('POST', kintone.api.url('/k/v1/file', true), false); xmlHttp.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); xmlHttp.onload = function() { if (xmlHttp.status === 200) { var key = JSON.parse(xmlHttp.responseText).fileKey; // 继续将上传的文件与记录相关联 } }; xmlHttp.send(formData);
HTTP应答以如下JSON格式返回。
返回数据
{"fileKey": "590279cd-6657-419f-8fac-d760a4a6caaa"}
上传的文件和记录的关联
将刚才获取的fileKey和所指定的记录关联。
关联后,文件就会被设为记录的附件。
在现有记录基础上添加附件
var json = { app: kintone.app.getId(), id: kintone.app.record.getId(), record: { file: { value: [{ fileKey: key }] } } }; kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', json);
以上就完成文件上传了。
该Tips在2014年4月版中进行过确认。
回复(10)
是字段代码。
json = {
app: kintone.app.getId(),
id
: kintone.app.record.getId(),
record: {
file
: {
value: [{
fileKey: key
}]
}
}
}
更新key的json里面的file是字段代码还是?
是不是因为附件是属于table的字段,上传文件时要指定table的行id
我是把上传的文件返回的key做绑定的
上面有说※ 这里获取的fileKey不能用于文件下载。
请问,我将返回所上传的文件的文件Key更新记录API添加到记录中,更新成功了,为什么在记录中看不到上传的文件?
不好意思,我们暂不提供具体实现的技术支持。
怎么上传文件,那个Javascript范例,我是用c#来实现,要怎么用
不太理解你说的动态库的意思,能否详细说明。
你还可以参考以下文档:
https://cybozudev.kf5.com/hc/kb/article/1004305/
https://cybozudev.kf5.com/hc/kb/article/1004319/
请问,有没有访问kintone接口的动态库