移动到 blob 存储后文件内容被重写
File contents being rewritten after moving to blob storage
过去几天我一直在试验 Azure blob 存储,尝试为我的 UWP 应用程序构建一个云数据库。
我设法获得了将文件上传到 Azure 存储的功能,但文件的内容被替换为我想称之为垃圾的内容,但我确信它有一种模式表明我做错了什么。
我要上传的文件是简单的 .txt 文件,信息行由字符分隔。
.txt 文件的内容格式应如下所示:
:SKU|:brand|:brand |:Train smarter and go farther with the brand, a product designed to help you reach your peak performance.|:249.95|:|:|:|:|:|:|:https://link.com|
:SKU|:brand|:brand Bluetooth Speaker |:Get up to 87 hours of great-sounding wireless music with the brand Bluetooth Speaker .|:269.00|:|:|:|:|:|:|:https://link.com|
:SKU|:brand|:brand Docking Station - USB 3.0 |:This USB 3.0 brand docking station connects up to three additional monitors, external devices, and the Internet .|:169.99|:|:|:|:|:|:|:https://link.com|
但是在上传到我的 blob 存储之后,内容看起来像这样:
:SKU|:|:-//W3C//DTD XHTML 1.0 Strict//EN|://DTD XHTML 1.0 Strict//EN|:/W3C//DTD XHTML 1.0 Strict//EN|:|:|:|:|:|:|:-//W3C//DTD XHTML 1.0 Strict//EN|
:SKU|:|:-//W3C//DTD XHTML 1.0 Strict//EN|://DTD XHTML 1.0 Strict//EN|:/W3C//DTD XHTML 1.0 Strict//EN|:|:|:|:|:|:|:-//W3C//DTD XHTML 1.0 Strict//EN|
:SKU|:|:-//W3C//DTD XHTML 1.0 Strict//EN|://DTD XHTML 1.0 Strict//EN|:/W3C//DTD XHTML 1.0 Strict//EN|:|:|:|:|:|:|:-//W3C//DTD XHTML 1.0 Strict//EN|
:SKU|:|:-//W3C//DTD XHTML 1.0 Strict//EN|://DTD XHTML 1.0 Strict//EN|:/W3C//DTD XHTML 1.0 Strict//EN|:|:|:|:|:|:|:-//W3C//DTD XHTML 1.0 Strict//EN|
:SKU|:|:-//W3C//DTD XHTML 1.0 Strict//EN|://DTD XHTML 1.0 Strict//EN|:/W3C//DTD XHTML 1.0 Strict//EN|:|:|:|:|:|:|:-//W3C//DTD XHTML 1.0 Strict//EN|
:SKU|:brand|:brand 1TB Hard Drive for Laptops|:Upgrade your laptop to a 1 TB of storage with a high quality, reliable brand hard drive.|:68.85|:|:|:|:|:|:|:https://link.com|
我的第一个 blob 存储实验是关于直接上传文件本身,但这导致了同样的问题,所以我尝试了一种不同的方法(流 reading/writing),认为这个方法对我来说不起作用试图做。现在我正在使用流方法(除非有人有其他建议,否则我会坚持使用)但是对于云连接部分(以及一般的 UWP)来说,我是如此陌生,我不知道我可能做错了什么。
这是我用来上传到我的 blob 存储的代码:
public class DatabaseHelper
{
CloudBlockBlob blobb;
public DatabaseHelper()
{
StorageCredentials credentials = new StorageCredentials("nameommited", "key ommitted");
CloudStorageAccount storageAccount = new CloudStorageAccount(credentials, true);
var blobClient = storageAccount.CreateCloudBlobClient();
var container = blobClient.GetContainerReference("testcontainer");
container.CreateIfNotExistsAsync();
CloudBlockBlob blob = container.GetBlockBlobReference("testfile.txt");
blob.DeleteIfExistsAsync();
blobb = blob;
}
public async void UploadFile(StorageFile fileToUpload)
{
var fileStream = await fileToUpload.OpenAsync(FileAccessMode.Read);
ulong size = fileStream.Size;
// Get a data stream from somewhere.
Stream inputStream = fileStream.AsStream(); ;
await blobb.UploadFromStreamAsync(inputStream);
}
}
基于您的 DatabaseHelper
,我构建了我的应用程序来测试这个问题,如下所示:
private async void btnUploadFile_Click(object sender, RoutedEventArgs e)
{
var picker = new Windows.Storage.Pickers.FileOpenPicker();
picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail;
picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.Desktop;
picker.FileTypeFilter.Add(".txt");
Windows.Storage.StorageFile file = await picker.PickSingleFileAsync();
if (file != null)
{
var fileHelper = new DatabaseHelper();
await fileHelper.UploadFile(file);
}
}
这是我测试的txt文件,你可以参考test.txt。
结果
我注意到您在 DatabaseHelper
构造函数中调用了 async 方法,我认为如果您的容器不存在会有一些风险。另外,你可以用Microsoft Azure Storage Explorer for uploading your txt file directly to azure blob, in order to isolate this issue. Also, there is a sample about operate Azure blob storage in UWP apps,你可以参考一下
过去几天我一直在试验 Azure blob 存储,尝试为我的 UWP 应用程序构建一个云数据库。
我设法获得了将文件上传到 Azure 存储的功能,但文件的内容被替换为我想称之为垃圾的内容,但我确信它有一种模式表明我做错了什么。
我要上传的文件是简单的 .txt 文件,信息行由字符分隔。
.txt 文件的内容格式应如下所示:
:SKU|:brand|:brand |:Train smarter and go farther with the brand, a product designed to help you reach your peak performance.|:249.95|:|:|:|:|:|:|:https://link.com|
:SKU|:brand|:brand Bluetooth Speaker |:Get up to 87 hours of great-sounding wireless music with the brand Bluetooth Speaker .|:269.00|:|:|:|:|:|:|:https://link.com|
:SKU|:brand|:brand Docking Station - USB 3.0 |:This USB 3.0 brand docking station connects up to three additional monitors, external devices, and the Internet .|:169.99|:|:|:|:|:|:|:https://link.com|
但是在上传到我的 blob 存储之后,内容看起来像这样:
:SKU|:|:-//W3C//DTD XHTML 1.0 Strict//EN|://DTD XHTML 1.0 Strict//EN|:/W3C//DTD XHTML 1.0 Strict//EN|:|:|:|:|:|:|:-//W3C//DTD XHTML 1.0 Strict//EN|
:SKU|:|:-//W3C//DTD XHTML 1.0 Strict//EN|://DTD XHTML 1.0 Strict//EN|:/W3C//DTD XHTML 1.0 Strict//EN|:|:|:|:|:|:|:-//W3C//DTD XHTML 1.0 Strict//EN|
:SKU|:|:-//W3C//DTD XHTML 1.0 Strict//EN|://DTD XHTML 1.0 Strict//EN|:/W3C//DTD XHTML 1.0 Strict//EN|:|:|:|:|:|:|:-//W3C//DTD XHTML 1.0 Strict//EN|
:SKU|:|:-//W3C//DTD XHTML 1.0 Strict//EN|://DTD XHTML 1.0 Strict//EN|:/W3C//DTD XHTML 1.0 Strict//EN|:|:|:|:|:|:|:-//W3C//DTD XHTML 1.0 Strict//EN|
:SKU|:|:-//W3C//DTD XHTML 1.0 Strict//EN|://DTD XHTML 1.0 Strict//EN|:/W3C//DTD XHTML 1.0 Strict//EN|:|:|:|:|:|:|:-//W3C//DTD XHTML 1.0 Strict//EN|
:SKU|:brand|:brand 1TB Hard Drive for Laptops|:Upgrade your laptop to a 1 TB of storage with a high quality, reliable brand hard drive.|:68.85|:|:|:|:|:|:|:https://link.com|
我的第一个 blob 存储实验是关于直接上传文件本身,但这导致了同样的问题,所以我尝试了一种不同的方法(流 reading/writing),认为这个方法对我来说不起作用试图做。现在我正在使用流方法(除非有人有其他建议,否则我会坚持使用)但是对于云连接部分(以及一般的 UWP)来说,我是如此陌生,我不知道我可能做错了什么。
这是我用来上传到我的 blob 存储的代码:
public class DatabaseHelper
{
CloudBlockBlob blobb;
public DatabaseHelper()
{
StorageCredentials credentials = new StorageCredentials("nameommited", "key ommitted");
CloudStorageAccount storageAccount = new CloudStorageAccount(credentials, true);
var blobClient = storageAccount.CreateCloudBlobClient();
var container = blobClient.GetContainerReference("testcontainer");
container.CreateIfNotExistsAsync();
CloudBlockBlob blob = container.GetBlockBlobReference("testfile.txt");
blob.DeleteIfExistsAsync();
blobb = blob;
}
public async void UploadFile(StorageFile fileToUpload)
{
var fileStream = await fileToUpload.OpenAsync(FileAccessMode.Read);
ulong size = fileStream.Size;
// Get a data stream from somewhere.
Stream inputStream = fileStream.AsStream(); ;
await blobb.UploadFromStreamAsync(inputStream);
}
}
基于您的 DatabaseHelper
,我构建了我的应用程序来测试这个问题,如下所示:
private async void btnUploadFile_Click(object sender, RoutedEventArgs e)
{
var picker = new Windows.Storage.Pickers.FileOpenPicker();
picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail;
picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.Desktop;
picker.FileTypeFilter.Add(".txt");
Windows.Storage.StorageFile file = await picker.PickSingleFileAsync();
if (file != null)
{
var fileHelper = new DatabaseHelper();
await fileHelper.UploadFile(file);
}
}
这是我测试的txt文件,你可以参考test.txt。
结果
我注意到您在 DatabaseHelper
构造函数中调用了 async 方法,我认为如果您的容器不存在会有一些风险。另外,你可以用Microsoft Azure Storage Explorer for uploading your txt file directly to azure blob, in order to isolate this issue. Also, there is a sample about operate Azure blob storage in UWP apps,你可以参考一下