我们目前正在迁移旧用户数据,这些数据存储在我们的某个专用服务器上,或者在离子移动应用程序本地存储到Azure(或两者)。我们已完成基本表格数据的迁移以及设备上的图像。我们遇到的问题是将图像从旧的专用服务器传输到Azure Blob存储,而不会在上传之前将图像下载到设备(由于数据使用问题)。
使用案例
1)用户登录更新的移动应用程序/网站。
2)用户数据在“同步”步骤中从旧服务器移动到Azure。
3)使用Azure生成的SAS查询字符串将所有本地映像上载到Azure blob。
4)所有本地不再存在的图像需要从专用服务器移动到azure blob存储
问题:
是否可以移动这些文件而不先将它们下载到设备然后上传它们。当前系统是VB.NET MVC应用程序。我看过Azure Blob Storage SDK的参考资料,但从我看到它只能作为C#库提供。
当前的想法:
1)构建一个C#应用程序,该应用程序使用Storage SDK将文件复制到blob存储。在这种情况下,不确定如何使用SAS查询字符串。另外如何监控上传的状态并转发回应用/网站?
2)首先将图像下载到设备,然后使用SAS查询字符串正常上传
非常感谢任何帮助或建议。谢谢你的时间。
答案 0 :(得分:0)
是否可以移动这些文件而不先将它们下载到设备然后上传它们。当前系统是VB.NET MVC应用程序。我看过Azure Blob Storage SDK的参考资料,但从我看到它只能作为C#库提供。
据我所知,我们无法直接在blob存储中直接复制url而不先将其下载到设备然后再上传。
azure存储blob支持使用Copy Blob rest api command从另一个blob或文件内容复制服务器端。
azure SDK还执行StartCopy方法,该方法将使用Copy Blob rest api发送请求。所以我们不能直接在blob存储中直接复制url而不先将它们下载到设备然后上传它们。
首先将图像下载到设备,然后使用SAS查询字符串正常上传
我建议您先尝试将图片下载到本地的内存流中,然后从流中上传blob。
上传后,您可以发布此流。
更多细节,您可以参考下面的代码示例:
string blobContainerSasUri = "";
string filename = "";
string filepathurl = "";
CloudBlobContainer container = new CloudBlobContainer(new Uri(blobContainerSasUri));
CloudBlockBlob blockblob = container.GetBlockBlobReference(filename);
using (var client = new HttpClient())
{
//get the url
var request = new HttpRequestMessage(HttpMethod.Get, "filepathurl");
var sendTask = client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
var response = sendTask.Result;
HttpStatusCode status = response.StatusCode;
if (status == HttpStatusCode.OK)
{
var httpStream = response.Content.ReadAsStreamAsync().Result;
MemoryStream ms = new MemoryStream();
httpStream.CopyTo(ms);
ms.Position = 0;
blockblob.UploadFromStream(ms);
}
}