有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java创建签名URL将对象放入Google存储

我正在努力创建签名URL,以便将文件上传到谷歌存储。 首先,我使用JSON密钥获取私钥和clientId:

AuthCredentials.ServiceAccountAuthCredentials serviceAccountAuthCredentials = AuthCredentials.ServiceAccountAuthCredentials.createForJson(json_resource.getInputStream());
PrivateKey key = serviceAccountAuthCredentials.credentials().getPrivateKey();
Signature signer = Signature.getInstance("SHA256withRSA");
signer.initSign(key);

之后,创建要签名的字符串:

String upload_uri = "PUT\n\n" + expiration +
                "\n/" + bucketName + "/" + folderPath + "/" + fileName;

然后签名字符串:

signer.update(stringToSign.getBytes("UTF-8"));
byte[] rawSignature = signer.sign();
String signature = new String(Base64.encodeBase64(rawSignature, false), "UTF-8");

然后使用签名字符串组合URL:

final String clientId = serviceAccountAuthCredentials.account();
String url = "http://storage.googleapis.com/" + 
             bucketName + "/" + folderPath + "/" + fileName +
             "?GoogleAccessId=" + clientId +
             "&Expires=" + expiration +
             "&Signature=" + URLEncoder.encode(signature, "UTF-8");

使用此URL,我收到错误信息:

SignatureDoesNotMatchThe request signature we calculated does not match the signature you provided. Check your Google secret key and signing method.GET 1485340222074 /bucketName/fileName


共 (1) 个答案

  1. # 1 楼答案

    我发现我必须在StringToSign中设置内容类型才能使PUT生效。在设置内容类型之前,我收到了与您相同的错误消息