Index
上传文件
将文件上传到附件字段的API。
上传的文件的文件Key可用于添加或更新记录等。
一次最多可上传一个文件。
使用获取记录API获取到的文件Key不能用于上传文件。
※上传文件 API不支持使用kintone.api() 发送 REST API 请求。
HTTP 方法
POST
URI
https://(子域名).cybozu.cn/k/v1/file.json
来宾空间
https://(域名).cybozu.cn/k/guest/(空间ID)/v1/file.json
必要的访问权限
无
※如果上传的文件需要跟记录关联,请参考添加记录以及更新记录时必要的访问权限。
请求格式
使用multipart/form-data格式发送请求。详情请参照RFC1867、RFC7578。
Content-Disposition 内的name指定「file」、filename指定文件名。
※如果是中文文件,使用GBK编码指定内容。
请求的范例
包含请求头部的范例
发送文件内容为【test】的 test.txt 文件时
POST /k/v1/file.json HTTP/1.1 Host: example.cybozu.cn:443 X-Cybozu-Authorization: cnlvX2Z1a3VkYTpjeWJvenU= Content-Type: multipart/form-data; boundary=---------------------------bee48a285354 Content-Length: 188 -----------------------------bee48a285354 Content-Disposition: form-data; name="file"; filename="test.txt" Content-Type: text/plain test -----------------------------bee48a285354--
应答的范例
将返回所上传的文件的文件Key。在使用数据添加、数据更新等API时,文件Key可作为附件字段的值来使用(下文)。
{ "fileKey": "c15b3870-7505-4ab6-9d8d-b9bdbc74f5d6" }
所上传的文件和记录的关联
在执行添加或更新API时,获取到的文件Key可作为附件的值来使用,如下。
请求头部(使用更新记录的API时)
PUT /k/v1/record.json HTTP/1.1 Host: example.cybozu.cn:443 X-Cybozu-Authorization: QWRtaW5pc3RyYXRvcjpjeWJvenU= Authorization: Basic QWRtaW5pc3RyYXRvcjpjeWJvenU= Content-Type: application/json
请在Content-Type中指定application/json。如不指定,JSON 无法识别,执行时将报错。
正文(使用更新记录API时)
{ "app": 7, "id": 1, "record": { "attached_file": { "value": [ { "fileKey": " c15b3870-7505-4ab6-9d8d-b9bdbc74f5d6" } ] } } }
限制事项
上传后的文件如果没有通过添加记录API或更新记录API添加到记录中时,该文件将在3天后删除。
保存在临时保存空间中的文件所占的空间也将算到磁盘使用量中。
其他请参考限制事项 。
相关Tips
JavaScript范例
XMLHttpRequest
var blob = new Blob(["Sample Test File"], {type: "text\/plain"}); var formData = new FormData(); formData.append("__REQUEST_TOKEN__", kintone.getRequestToken()); formData.append("file", blob, "test.txt"); var url = 'https://{subdomain}.cybozu.cn/k/v1/file.json'; var xhr = new XMLHttpRequest(); xhr.open('POST', url); xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); xhr.onload = function() { if (xhr.status === 200) { // success console.log(JSON.parse(xhr.responseText)); } else { // error console.log(JSON.parse(xhr.responseText)); } }; xhr.send(formData);
回复(3)
c# 我是这样写的
public static string HttpPostData (string url, int timeOut, string fileKeyName, string filePath, string API_Token, string Host, string authorCode) {
string responseContent;
var memStream = new MemoryStream ();
var webRequest = (HttpWebRequest) WebRequest.Create (url);
if (url.StartsWith ("https", StringComparison.OrdinalIgnoreCase)) {
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback (CheckValidationResult);
webRequest = WebRequest.Create (url) as HttpWebRequest;
webRequest.ProtocolVersion = HttpVersion.Version11;
} else {
webRequest = WebRequest.Create (url) as HttpWebRequest;
}
}
// 边界符
var boundary = "---------------" + DateTime.Now.Ticks.ToString ("x");
// 边界符
var beginBoundary = Encoding.ASCII.GetBytes ("--" + boundary + "\r\n");
var fileStream = new FileStream (filePath, FileMode.Open, FileAccess.Read);
// 最后的结束符
var endBoundary = Encoding.ASCII.GetBytes ("--" + boundary + "--\r\n");
// 设置属性
webRequest.Method = "POST";
webRequest.Timeout = timeOut;
webRequest.Headers.Add ("X-Cybozu-API-Token", API_Token);
webRequest.Host = Host;
webRequest.Headers.Add ("Authorization", "Basic " + authorCode);
webRequest.ContentType = "multipart/form-data; boundary=" + boundary;
// 写入文件
const string filePartHeader = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n" + "Content-Type: application/octet-stream\r\n\r\n";
var header = string.Format (filePartHeader, fileKeyName, filePath);
var headerbytes = Encoding.UTF8.GetBytes (header);
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
memStream.Write (beginBoundary, 0, beginBoundary.Length);
memStream.Write (headerbytes, 0, headerbytes.Length);
var buffer = new byte[1024];
int bytesRead;
// =0
while ((bytesRead = fileStream.Read (buffer, 0, buffer.Length)) != 0) { memStream.Write (buffer, 0, bytesRead); }
// 写入字符串的Key
var stringKeyHeader = "\r\n--" + boundary + "\r\nContent-Disposition: form-data; name=\"{0}\"" + "\r\n\r\n{1}\r\n";
// 写入最后的结束边界符
memStream.Write (endBoundary, 0, endBoundary.Length);
webRequest.ContentLength = memStream.Length;
var requestStream = webRequest.GetRequestStream ();
memStream.Position = 0;
var tempBuffer = new byte[memStream.Length];
memStream.Read (tempBuffer, 0, tempBuffer.Length);
memStream.Close ();
requestStream.Write (tempBuffer, 0, tempBuffer.Length);
requestStream.Close ();
var httpWebResponse = (HttpWebResponse) webRequest.GetResponse ();
using (var httpStreamReader = new StreamReader (httpWebResponse.GetResponseStream (), Encoding.GetEncoding ("utf-8"))) { responseContent = httpStreamReader.ReadToEnd (); } fileStream.Close ();
httpWebResponse.Close ();
webRequest.Abort ();
return responseContent;
}
报错502
HTTP 方法:POST
URI:https://(子域名).cybozu.cn/k/v1/file.json
具体怎么调用你可以看本文后面的范例。
请问,上传文件要怎么调用接口