2017-04-13 32 views
0

我需要使用JAVA使用REST API获取Azure文件存储中文件共享中可用文件的内容。有官方文件可用,但我感到困惑,因为没有明确的解释。所以,如果有人能够提供样品,那么它对我来说真的很有帮助。使用REST API的Microsoft Azure文件存储的代码示例(JAVA)

+0

请分享您迄今为止编写的代码以及您面临的问题。你有什么理由不使用JAVA SDK? –

+0

感谢您的回复。但是,我已经设法解决了这个问题,我在下面的答案中发布了相同的内容。如果需要优化,请给我建议。 – ashishakp

+0

我已经完成了使用JAVA SDK并成功了。但根据我的要求,我需要涵盖所有可能的方式。 – ashishakp

回答

3

我在正确生成验证字符串时遇到了问题,它给出了Error:403,Message:Forbidden。但使用下面的代码,我成功地设法做到了这一点。

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; 
}} 
相关问题