Пример кода для хранилища файлов Microsoft Azure с использованием REST API (JAVA)

Мне нужно получить содержимое файлов, доступных в общей папке в хранилище файлов Azure, с помощью REST API с использованием JAVA. Есть официальные документы, но я запутался, так как нет четкого объяснения. Так что, если кто-то может предоставить образец, это будет очень полезно для меня.


person ashishakp    schedule 13.04.2017    source источник
comment
Пожалуйста, поделитесь кодом, который вы написали до сих пор, и с какими проблемами вы столкнулись. Есть ли причина, по которой вы не хотите использовать JAVA SDK?   -  person Gaurav Mantri    schedule 13.04.2017
comment
Спасибо за ваш ответ. Тем не менее, мне удалось решить проблему, и я публикую то же самое в ответе ниже. Если требуется какая-либо оптимизация, пожалуйста, предложите мне.   -  person ashishakp    schedule 13.04.2017
comment
Я сделал это с помощью JAVA SDK и также преуспел. Но согласно моим требованиям мне нужно охватить все возможные способы.   -  person ashishakp    schedule 13.04.2017


Ответы (1)


У меня возникла проблема с правильным созданием строки аутентификации, и она выдавала ошибку: 403, сообщение: запрещено. Но с помощью приведенного ниже кода мне это удалось.

public class FileStorageServiceWithRest {
private static final String account = "<your_account_name>";
private static final String key = "<your_access_key>";

public static void main(String args[]) throws Exception{
    String urlString = "http://" + account + ".file.core.windows.net/myshare/<your_file_name>";
    HttpURLConnection connection = (HttpURLConnection)(new URL(urlString)).openConnection();
    getFileRequest(connection, account, key);
    connection.connect();
    System.out.println("Response message : "+connection.getResponseMessage());
    System.out.println("Response code : "+connection.getResponseCode());

    BufferedReader br = null;
    if(connection.getResponseCode() != 200){
        br = new BufferedReader(new InputStreamReader((connection.getErrorStream())));
    }else{
         br = new BufferedReader(new InputStreamReader((connection.getInputStream())));
    }
    System.out.println("Response body : "+br.readLine());
}

public static void getFileRequest(HttpURLConnection request, String account, String key) throws Exception{
    SimpleDateFormat fmt = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss");
    fmt.setTimeZone(TimeZone.getTimeZone("GMT"));
    String date = fmt.format(Calendar.getInstance().getTime()) + " GMT";
    String stringToSign =  "GET\n"
            + "\n" // content encoding
            + "\n" // content language
            + "\n" // content length
            + "\n" // content md5
            + "\n" // content type
            + "\n" // date
            + "\n" // if modified since
            + "\n" // if match
            + "\n" // if none match
            + "\n" // if unmodified since
            + "\n" // range
            + "x-ms-date:" + date + "\nx-ms-version:2014-02-14\n" //headers
            + "/"+account + request.getURL().getPath(); // resources
    System.out.println("stringToSign : "+stringToSign);
    String auth = getAuthenticationString(stringToSign);
    request.setRequestMethod("GET");
    request.setRequestProperty("x-ms-date", date);
    request.setRequestProperty("x-ms-version", "2014-02-14");
    request.setRequestProperty("Authorization", auth);
}

private static String getAuthenticationString(String stringToSign) throws Exception{
    Mac mac = Mac.getInstance("HmacSHA256");
    mac.init(new SecretKeySpec(Base64.decode(key), "HmacSHA256"));
    String authKey = new String(Base64.encode(mac.doFinal(stringToSign.getBytes("UTF-8"))));
    String auth = "SharedKey " + account + ":" + authKey;
    return auth;
}}
person ashishakp    schedule 13.04.2017