[英]Azure blob SAS and Localized file name
我正在使用jclouds API将文件上传到azure blob,但是找不到使用jClouds API生成SAS的任何方法,因此使用Azure API为特定的blob创建SAS。 我面临的问题是我尝试上传的文件名称中包含本地化字符,例如“Jérôme”,在上传时我必须在特定级别进行编码和解码,因此请确保在生成SAS时我正在传递文件的已解码(实际)名称,但我无法使用生成的SAS访问该文件。
PS。 我在上传和SAS生成中尝试了不同的编码和解码字符串(文件名)组合,但徒劳无功。
我收到的错误是“不存在此类Blob”,在某些情况下为“签名验证失败”
有人可以用合适的方法指导我吗?
如果需要代码段,请告诉我。
上载:
try (BlobStoreContext context = ContextBuilder.newBuilder("azureblob")
.credentials(this.storeName, this.storeKey)
.buildView(BlobStoreContext.class)) {
final BlobStore store = context.getBlobStore();
payload.getContentMetadata().setContentLength(blobSize);
final Blob blob = store.blobBuilder(URLEncoder.encode(blobName, StorageConstants.UNICODE_FORMAT)).payload(payload).build();
logger.debug("Uploading...");
store.putBlob(this.containerName, blob);
logger.debug("Uploaded...");
return true;
} catch (IOException e) {
logger.error("IOException while uploading file to azure blob", e);
return false;
} catch (Exception e) {
logger.error("Exception while uploading file to azure blob", e);
return false;
}
SAS代
String url = "";
try
{
final CloudBlobContainer container = getUploadContainer();
final CloudBlockBlob blob = container.getBlockBlobReference(blobName);
url = blob.getUri() +"?"+ blob.generateSharedAccessSignature(getPolicy(), null);
} catch (StorageException e) {
logger.error("Storage Exception was encounter in generateAttachmentSasUrl() :", e);
} catch (InvalidKeyException e) {
logger.error("Invalid Key Exception was encountered in generateAttachmentSasUrl() :", e);
} catch (URISyntaxException e) {
logger.error("Problems creating an URI was encounter in generateAttachmentSasUrl() : ", e);
}
请使用jclouds 2.0.0-SNAPSHOT进行测试。 URL编码的许多问题已作为JCLOUDS-217的一部分修复 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.