调用该接口生成文件上传到OSS的信息。

使用说明

该接口为阿里云物联网平台中,设备管理相关业务通用的文件上传接口,文件上传完成后,请按照对应业务接口的要求传递文件的信息。

步骤如下:

1. 调用本接口生成文件上传到对象存储(OSS)的信息。

本接口的返回参数是调用OSS PostObject上传文件的请求参数,包含KeyOSSAccessKeyIdSignaturePolicy

2. 请在本接口返回结果后的1分钟之内,使用OSS SDK调用PostObject接口上传文件。上传文件的代码示例,请参见下文“返回参数的用途”。

说明 本接口返回的参数信息有效期为1分钟,请在1分钟内上传文件。上传的文件大小不能超过1,000 MB。

3. 文件上传完成后,请在60分钟内,调用对应业务接口,否则上传的文件将被系统定期自动清理。

例如,创建自定义类型的设备任务时,如果需要传入设备文件,请先使用该接口上传文件,再把相关的文件信息作为请求参数,来调用CreateJob接口。

使用说明

单阿里云账号调用该接口的每秒请求数(QPS)最大限制为5。

说明 RAM用户共享阿里云账号配额。

调试

您可以在OpenAPI Explorer中直接运行该接口,免去您计算签名的困扰。运行成功后,OpenAPI Explorer可以自动生成SDK代码示例。

请求参数

名称 类型 是否必选 示例值 描述
Action String GenerateFileUploadURL

系统规定参数。取值:GenerateFileUploadURL。

BizCode String DEVICE_JOB_FILE

文件所属的业务场景编码。

设备任务文件使用DEVICE_JOB_FILE

FileSuffix String bin

文件扩展名。可选:binapktargztar.gzzipgzip

默认扩展名为bin

IotInstanceId String iot-cn-0pp1n8t****

实例ID。公共实例不传此参数,企业版实例需传入。

调用API时,除了本文介绍的该API的特有请求参数,还需传入公共请求参数。公共请求参数说明,请参见公共参数文档

返回数据

名称 类型 示例值 描述
Code String iot.system.SystemException

调用失败时,返回的错误码。更多信息,请参见错误码

Data Struct

调用成功时,返回的文件上传信息。详情参见以下参数信息。

Host String https://iotx-bucket-name.oss-***.aliyuncs.com

OSS的接入域名。

Key String subpath/65dfcda0473be29836dfde585472****/ck2nfzljo00023g7kysg0****.suffix

调用OSS API PostObject上传对象(即文件)的名称,包含OSS对象的完整路径。

ObjectStorage String OSS

对象存储类型。默认为OSS。

OssAccessKeyId String cS8uRRy54Rsz****

OSS Bucket拥有者的AccessKey ID。

该OSS Bucket将存储文件。

Policy String eyJleHBpcmF****

OSS通过该参数验证请求表单域的合法性。

Signature String v6lViO4FBvfquajQjg20K5hK****

根据AccessKey SecretPolicy计算出的签名信息。调用OSS API时,OSS验证该签名信息,从而确认Post请求的合法性。

ErrorMessage String 系统异常

调用失败时,返回的出错信息。

RequestId String E55E50B7-40EE-4B6B-8BBE-D3ED55CCF565

阿里云为该请求生成的唯一标识符。

Success Boolean true

表示是否调用成功。

  • true:调用成功。
  • false:调用失败。

返回参数的用途

调用OSS PostObject接口时,使用本接口的返回参数值作为请求参数值,将您编辑好的文件上传到对象存储(OSS)。

关于上传文件的SDK示例,请参见文件上传

以下是向对象存储OSS上传文件的Java代码示例。

  • 在pom.xml中添加以下依赖。
    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpclient</artifactId>
      <version>4.5.3</version>
    </dependency>
    
    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpmime</artifactId>
      <version>4.5.10</version>
    </dependency>
    
  • 上传文件的代码如下。
    
    public static boolean postObject(String key,
                                      String host,
                                      String policy,
                                      String ossAccessKeyId,
                                      String signature,
                                      String data) throws IOException {
      CloseableHttpClient httpClient = HttpClients.createDefault();
      HttpPost uploadFile = new HttpPost(host);
    
      MultipartEntityBuilder builder = MultipartEntityBuilder.create();
      builder.addTextBody("key", key, ContentType.TEXT_PLAIN);
      builder.addTextBody("policy", policy, ContentType.TEXT_PLAIN);
      builder.addTextBody("OSSAccessKeyId", ossAccessKeyId, ContentType.TEXT_PLAIN);
      builder.addTextBody("signature", signature, ContentType.TEXT_PLAIN);
      builder.addTextBody("success_action_status", "200", ContentType.TEXT_PLAIN);
      builder.addBinaryBody("file", data.getBytes());
    
      HttpEntity multipart = builder.build();
      uploadFile.setEntity(multipart);
      CloseableHttpResponse response = httpClient.execute(uploadFile);
    
      if (response.getStatusLine().getStatusCode() == 200) {
        return true;
      }
    
      return false;
    }
    

示例

请求示例

http(s)://iot.cn-shanghai.aliyuncs.com/?Action=GenerateFileUploadURL
&BizCode=DEVICE_JOB_FILE
&FileSuffix=bin
&<公共请求参数>

正常返回示例

XML 格式

<GenerateFileUploadURLResponse>
  <RequestId>E55E50B7-40EE-4B6B-8BBE-D3ED55CCF565</RequestId>
  <Data>
        <Policy>eyJleHBpcmF****</Policy>
        <Signature>v6lViO4FBvfquajQjg20K5hK****</Signature>
        <ObjectStorage>OSS</ObjectStorage>
        <Host>https://iotx-bucket-name.oss-***.aliyuncs.com</Host>
        <OssAccessKeyId>cS8uRRy54Rsz****</OssAccessKeyId>
        <Key>subpath/65dfcda0473be29836dfde585472****/ck2nfzljo00023g7kysg0****.suffix</Key>
  </Data>
  <Success>true</Success>
</GenerateFileUploadURLResponse>

JSON 格式

{
    "RequestId": "E55E50B7-40EE-4B6B-8BBE-D3ED55CCF565",
    "Data": {
        "Policy": "eyJleHBpcmF****",
        "Signature": "v6lViO4FBvfquajQjg20K5hK****",
        "ObjectStorage": "OSS",
        "Host": "https://iotx-bucket-name.oss-***.aliyuncs.com",
        "OssAccessKeyId": "cS8uRRy54Rsz****",
        "Key": "subpath/65dfcda0473be29836dfde585472****/ck2nfzljo00023g7kysg0****.suffix"
    },
    "Success": true
}