Help Center/ Scalable File Service/ API Reference/ Getting Started/ Listing General-Purpose File Systems
Updated on 2025-12-17 GMT+08:00

Listing General-Purpose File Systems

Scenarios

If you want to view information about all general-purpose file systems created by yourself, you can call the API for listing general-purpose file systems.

The following describes how to call the API for Listing General-Purpose File Systems. For details, see Getting Started.

Prerequisites

  • You have obtained the AK and SK. For details, see Obtaining Access Keys (AK/SK).
  • You have planned the region where you want to view general-purpose file systems and obtained the endpoint required for API calls. For details, see Endpoints.

Listing General-Purpose File Systems in the a1 Region

In this example, an Apache HttpClient is used.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package com.sfsclient;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;
import java.util.Map;

public class TestMain {
    //Obtain an AK/SK pair using environment variables or import the AK/SK pair in other ways. Using hard coding may result in leakage.
    //Obtain an AK/SK pair on the management console.
    public static String accessKey = "ACCESS_KEY_ID"; 
    public static String securityKey = "SECRET_ACCESS_KEY_ID"; 
    public static String endpoint = "sfs3.a1.region.com"; // The address of the General-Purpose File System service.

    public static void main(String[] str) {
        createFileSystem();

    }
    private static void listFileSystem() {
        String httpMethod = "GET";
        String date = DateUtils.formatDate(System.currentTimeMillis());

        /**Calculate the signature based on the request.**/
        String contentMD5 = "";
        String contentType = "";
        String canonicalizedHeaders = "x-obs-bucket-type:SFS";
        String canonicalizedResource = "/" ;

        // Content-MD5 and Content-Type fields do not contain line breaks. The data format is RFC 1123, which is the same as the time in the request.
        String stringToSign = httpMethod + "\n" +
                contentMD5 + "\n" +
                contentType + "\n" +
                date + "\n" +
                canonicalizedHeaders  + "\n" + canonicalizedResource;

        System.out.printf("StringToSign:\n[%s]\n\n", stringToSign);

        HttpURLConnection conn = null;

        try {
            String signature = Signature.signWithHmacSha1(securityKey, stringToSign);
            String authorization= "OBS " + accessKey + ":" + signature;
            System.out.printf("authorization:%s\n\n", authorization);

            // Create an HTTP request.
            URL url = new URL("http://" + endpoint);
            conn = (HttpURLConnection) url.openConnection();

            // Add a signature header.
            conn.setRequestMethod(httpMethod);
            conn.setRequestProperty("Date", date);
            conn.setRequestProperty("Content-Type", contentType);
            conn.setRequestProperty("x-obs-bucket-type", "SFS");
            conn.setRequestProperty("Authorization", authorization);
            conn.setDoOutput(true);

            String status = conn.getHeaderField(null);
            System.out.println(status);

            // Output the response message.
            Map<String, List<String>> headers = conn.getHeaderFields();
            for (Map.Entry<String, List<String>> entry : headers.entrySet()) {
                String key = entry.getKey();
                List<String> values = entry.getValue();
                if (key != null) {
                    for (String value : values) {
                        System.out.println(key + ": " + value);
                    }
                }
            }
            // Process the returned content.
            int statusCode = conn.getResponseCode();
            if (statusCode == HttpURLConnection.HTTP_OK) {
                InputStream responseStream = conn.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(responseStream));

                StringBuilder responseBody = new StringBuilder();
                String line;
                while ((line = reader.readLine()) != null) {
                    responseBody.append(line);
                }
                reader.close();

                System.out.println("responseBody: " + responseBody);
            } else {
                System.out.println("Error: " + statusCode);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (conn != null){
                conn.disconnect();
            }
        }
    }
}

The format of the Date header field DateUtils is as follows:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
package com.sfsclient;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Locale;
import java.util.TimeZone;

public class DateUtils {

    public static String formatDate(long time)
    {
        DateFormat serverDateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.ENGLISH);
        serverDateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
        return serverDateFormat.format(time);
    }
}

The method of calculating the signature character string is as follows:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.sfsclient;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException;
import java.security.InvalidKeyException;
import java.util.Base64;

public class Signature {
    public static String signWithHmacSha1(String sk, String canonicalString) throws UnsupportedEncodingException {

        try {
            SecretKeySpec signingKey = new SecretKeySpec(sk.getBytes("UTF-8"), "HmacSHA1");
            Mac mac = Mac.getInstance("HmacSHA1");
            mac.init(signingKey);
            return Base64.getEncoder().encodeToString(mac.doFinal(canonicalString.getBytes("UTF-8")));
        } catch (NoSuchAlgorithmException | InvalidKeyException | UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return null;
    }
}