Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为给定的SAS URI上载java文件_Java_C#_Azure_Azure Storage_Azure Storage Blobs - Fatal编程技术网

如何为给定的SAS URI上载java文件

如何为给定的SAS URI上载java文件,java,c#,azure,azure-storage,azure-storage-blobs,Java,C#,Azure,Azure Storage,Azure Storage Blobs,示例C#代码: static void上传文件(字符串sasUrl,字符串filepath) { 使用(var client=new HttpClient()) { client.DefaultRequestHeaders.Add(“x-ms-version”,version); client.DefaultRequestHeaders.Add(“x-ms-client-request-id”,SessionGuid); StringBuilder sb=新的StringBuilder(“”);

示例C#代码:

static void上传文件(字符串sasUrl,字符串filepath)
{
使用(var client=new HttpClient())
{
client.DefaultRequestHeaders.Add(“x-ms-version”,version);
client.DefaultRequestHeaders.Add(“x-ms-client-request-id”,SessionGuid);
StringBuilder sb=新的StringBuilder(“”);
foreach(GetFileChunks(filepath)中的字节[]块)
{
var blockid=GetHash(块);
HttpRequestMessage chunkMessage=新建HttpRequestMessage()
{
方法=HttpMethod.Put,
RequestUri=newuri(sasUrl+“&timeout=90&comp=block&blockid=“+WebUtility.UrlEncode(blockid)),
内容=新的ByteArrayContent(块)
};
chunkMessage.Headers.Add(“x-ms-blob-type”、“BlockBlob”);
chunkMessage.Content.Headers.Add(“MD5内容”,blockid);
TimeAction(“上传区块”+blockid+“花费了{0}毫秒”,()=>
{
var response=client.sendaync(chunkMessage).Result;
});
某人加上(“”);
sb.Append(blockid);
某人加上(“”);
}
某人加上(“”);
Trace.WriteLine(sb.ToString());
HttpRequestMessage commitMessage=新建HttpRequestMessage()
{
方法=HttpMethod.Put,
RequestUri=newuri(sasUrl+“&timeout=90&comp=blocklist”),
Content=新的StringContent(sb.ToString())
};
TimeAction(“提交块需要{0}毫秒”,()=>
{
var commit=client.sendaync(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>");


}
}
publicstaticvoiduploadfile(字符串sasUrl、字符串filepath、字符串sessionGuid)
{
文件文件=新文件(文件路径);
FileInputStream FileInputStream=null;
响应reply=新响应();
HttpClient client=HttpClientBuilder.create().build();
HttpPost请求=新的HttpPost(sasUrl);
请求。设置标题(“x-ms-version”、“2013-08-15”);
setHeader(“x-ms-client-request-id”,sessionGuid);
StringBuilder sb=新的StringBuilder(“”);
}
}
注意:我不能多次运行代码,因为我不能向服务器发送垃圾邮件。如有任何建议,将不胜感激
参考:

根据C#中的参考代码,它似乎在使用RESTAPI将文件作为块blob上传

因此,您可以参考RESTAPI参考,而无需参考用于构建上传请求的C#示例

但是,简单的方法是使用Azure Storage SDK for Java。要上传文件,您只需要使用类来上传带有函数的文件,请参阅教程

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();
}
URL-sasUrl=新URL(“”);
尝试
{.
CloudBlockBlob blob=新的CloudBlockBlob(sasUrl)
文件源=新文件(文件路径);
upload(新文件输入流(source),source.length());
}
捕获(例外e)
{
//输出堆栈跟踪。
e、 printStackTrace();
}

作为参考,请参阅for Azure Java Storage SDK。

您是否正在尝试将C#示例转换为Java代码?是的,我正在尝试上传我的文件,C#代码是来自微软的(rest api)示例代码您正在尝试上传a以上传硬件认证工具包(HCK)包,正如您发布的链接一样?是的,我正在尝试自动化windows驱动程序的签名过程,为此,我需要将文件上载到sas uri,我已经拥有了该文件。我在将其转换为java时遇到了一些问题,因为我是新手。看起来GetFileChunks只是将文件拆分为多个部分,GetHash用于使用MD5创建唯一的块Id,但这只是一个猜测..谢谢!我得到了一个响应SAS URL as sasull=那么我的block blob名称是什么??输入后/-->6c1b1cf4-4441-4a74-lc25-03e9ee8d1cfa.hlkx会自动从sasurl中获取容器名称,还是我必须明确提及它?如果是,它会是org66吗?在这种情况下会是什么?@TulsiSv哦,sas url是用于blob的,因此请直接使用
CloudBlockBlob blob=new CloudBlockBlob(sasUrl)
上载文件。
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();
}