跳到主要内容

v1 API 上传附件

API 使用者,可以通过本接口向表单的「上传文件」字段上传附件,上传成功后会返回附件的 id。随后在新增数据修改数据时,将该 id 填入对应的附件字段即可完成附件提交。

功能免费版专业版/专业增强版企业基础版企业协作版企业高级版
上传附件✔️✔️✔️

认证方式

V1 Basic 认证方式

headers 设置

需要在请求中设置如下 headers

  • Content-Type: multipart/form-data
  • Accept: application/json
  • Authorization: 放入上一步骤生成的 CODE

接口说明

  • 「上传文件」字段的附件需要分两步提交:
    1. 调用本接口上传文件,拿到附件的 id
    2. 新增数据 / 修改数据时,把一个或多个 id 以数组形式填入对应附件字段。
  • 文件需使用 multipart/form-data 编码上传,不支持 URL 或 base64。
  • 单个附件字段可上传的附件数量、单个文件大小,受字段在表单中设置的「数量上限」(最多 15 个)与「大小上限」限制。
  • 个人版用户/企业子账号用户,只可以向 自己创建 的表单上传附件。

接口描述

Request

POST https://jinshuju.net/api/v1/forms/FORM_TOKEN/entry_attachments

Content-Type: multipart/form-data

field_api_code=field_1
file=@/path/to/report.pdf
参数名称是否必须类型说明
FORM_TOKENString表单 Token
field_api_codeString目标附件字段的 API Code,可通过 get form 获取
dimension_api_codeStringfield_api_code 指向「表格字段」时必须,指定表格内的附件子字段的 API Code
fileFile要上传的文件

Response

{
"id": "5f3a1b2c4d5e6f7a8b9c0d1e",
"file_name": "report.pdf",
"content_type": "application/pdf",
"file_size": 102400,
"download_url": "https://example.jinshuju.net/...",
"preview_url": "https://example.jinshuju.net/..."
}
参数名称是否必须类型说明
idString附件的标识符,用于在新增/修改数据时填入附件字段
file_nameString文件名
content_typeString文件 MIME 类型
file_sizeNumber文件大小(字节)
download_urlString附件下载地址
preview_urlString预览地址,仅当附件为图片时返回

在新增数据时引用附件

拿到附件 id 后,在新增数据请求中,把 id 以数组形式填入附件字段:

{
"field_1": ["5f3a1b2c4d5e6f7a8b9c0d1e", "5f3a1b2c4d5e6f7a8b9c0d2f"]
}

错误响应

HTTP 状态码error_description说明
400file is required未上传文件,或 file 不是有效的文件
400field_api_code must reference an attachment fieldfield_api_code 指向的不是附件字段
400dimension_api_code is required when field is a table field目标为表格字段但未提供 dimension_api_code
400dimension_api_code must reference an attachment dimensiondimension_api_code 指向的不是附件子字段
404field_api_code not found表单中不存在该 field_api_code
404dimension_api_code not found表格字段中不存在该 dimension_api_code
422文件相关错误信息文件超出大小上限、类型不被允许或上传失败

示例代码

curl

curl -X POST "https://jinshuju.net/api/v1/forms/$FORM_TOKEN/entry_attachments" \
-u "$API_KEY:$API_SECRET" \
-F "field_api_code=field_1" \
-F "file=@/path/to/report.pdf"

Python

import requests

api_key = 'YOUR_API_KEY'
api_secret = 'YOUR_API_SECRET'
form_token = 'YOUR_FORM_TOKEN'

url = f'https://jinshuju.net/api/v1/forms/{form_token}/entry_attachments'

with open('/path/to/report.pdf', 'rb') as f:
response = requests.post(
url,
auth=(api_key, api_secret),
data={'field_api_code': 'field_1'},
files={'file': f}
)

attachment_id = response.json()['id']

# 再用 attachment_id 新增数据
entry_url = f'https://jinshuju.net/api/v1/forms/{form_token}/entries'
requests.post(entry_url, auth=(api_key, api_secret), json={'field_1': [attachment_id]})

Ruby

require 'net/http'
require 'uri'
require 'json'

api_key = 'YOUR_API_KEY'
api_secret = 'YOUR_API_SECRET'
form_token = 'YOUR_FORM_TOKEN'

uri = URI.parse("https://jinshuju.net/api/v1/forms/#{form_token}/entry_attachments")

request = Net::HTTP::Post.new(uri)
request.basic_auth(api_key, api_secret)
form_data = [
['field_api_code', 'field_1'],
['file', File.open('/path/to/report.pdf')]
]
request.set_form(form_data, 'multipart/form-data')

response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(request)
end

attachment_id = JSON.parse(response.body)['id']
puts(attachment_id)