gpt4 book ai didi

java - 如何在java中为给定的SAS URI上传文件

转载 作者:行者123 更新时间:2023-11-30 02:52:04 24 4
gpt4 key购买 nike

示例 C# 代码:

 static void UploadFile(string sasUrl, string filepath)
{
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("x-ms-version", Version);
client.DefaultRequestHeaders.Add("x-ms-client-request-id", SessionGuid);

StringBuilder sb = new StringBuilder("<?xml version=\"1.0\" encoding=\"utf-8\"?><BlockList>");

foreach (byte[] chunk in GetFileChunks(filepath))
{
var blockid = GetHash(chunk);
HttpRequestMessage chunkMessage = new HttpRequestMessage()
{
Method = HttpMethod.Put,
RequestUri = new Uri(sasUrl + "&timeout=90&comp=block&blockid=" + WebUtility.UrlEncode(blockid)),
Content = new ByteArrayContent(chunk)
};
chunkMessage.Headers.Add("x-ms-blob-type", "BlockBlob");
chunkMessage.Content.Headers.Add("MD5-Content", blockid);

TimeAction("Uploading chunk " + blockid + " took {0} ms", () =>
{
var response = client.SendAsync(chunkMessage).Result;
});
sb.Append("<Latest>");
sb.Append(blockid);
sb.Append("</Latest>");
}
sb.Append("</BlockList>");

Trace.WriteLine(sb.ToString());

HttpRequestMessage commitMessage = new HttpRequestMessage()
{
Method = HttpMethod.Put,
RequestUri = new Uri(sasUrl + "&timeout=90&comp=blocklist"),
Content = new StringContent(sb.ToString())
};
TimeAction("Commiting the blocks took {0} ms", () =>
{
var commit = client.SendAsync(commitMessage).Result;
});
}
}

我陷入了必须上传文件的困境。还想知道提交给定代码的原因是什么?

到目前为止我的进展是:

public static void uploadFile(String sasUrl , String filepath , String sessionGuid)
{
File file = new File(filepath);
FileInputStream fileInputStream=null;
Response reply = new Response();
HttpClient client = HttpClientBuilder.create().build();
HttpPost request = new HttpPost(sasUrl);
request.setHeader("x-ms-version", "2013-08-15");
request.setHeader("x-ms-client-request-id", sessionGuid);
StringBuilder sb = new StringBuilder("<?xml version=\"1.0\" encoding=\"utf-8\"?><BlockList>");


}
}

注意:我无法多次运行该代码,因为我无法向服务器发送垃圾邮件。任何建议将不胜感激引用:https://msdn.microsoft.com/en-us/library/windows/hardware/dn800660(v=vs.85).aspx

最佳答案

根据C#中的引用代码,似乎是使用REST API Put Block List将文件作为 block blob 上传。

所以你可以引用REST API引用而不需要引用C#示例来使用httpclient构造上传请求。

但是,简单的方法是使用适用于 Java 的 Azure 存储 SDK。要上传文件,您只需要使用类 CloudBlockBlob使用函数 upload(InputStream sourceStream, long length) 上传文件,请引用教程https://azure.microsoft.com/en-us/documentation/articles/storage-java-how-to-use-blob-storage/#upload-a-blob-into-a-container .

sas url 看起来像 https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=blocklist&...

这是示例代码。

URL sasUrl = new URL("<sas-url>");
try
{.
CloudBlockBlob blob = new CloudBlockBlob(sasUrl)
File source = new File(filePath);
blob.upload(new FileInputStream(source), source.length());
}
catch (Exception e)
{
// Output the stack trace.
e.printStackTrace();
}

作为引用,请参阅javadocs适用于 Azure Java 存储 SDK。

关于java - 如何在java中为给定的SAS URI上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38335450/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com