c# - 移动到 blob 存储后文件内容被重写

标签 c# azure uwp azure-storage azure-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 存储实验是直接上传文件本身,但这导致了同样的问题,因此我尝试了一种不同的方法(流读取/写入),认为该方法不适用于我想要做的事情。现在我正在使用流方法(除非有人有其他建议,否则我会坚持使用),但是对于云连接部分(以及一般的 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 .

结果

enter image description here

我注意到您在 DatabaseHelper 构造函数中调用了异步方法,我认为如果您的容器不存在,则会存在一些风险。此外,您可以使用 Microsoft Azure Storage Explorer用于将 txt 文件直接上传到 azure blob,以隔离此问题。另外,还有一个关于 operate Azure blob storage in UWP apps 的样本,你可以引用一下。

关于c# - 移动到 blob 存储后文件内容被重写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44099195/

相关文章:

c# - Redis超时异常

azure - 保护 Azure 表存储的安全

powershell - Azure 资源模板参数 hell

python - 使用 Python pip 安装 azure-iothub-device-client 时出错

memory-management - 如何在 UWP 应用程序运行时查看(近似)内存使用情况

visual-studio-2015 - UWP 发布包构建失败

c# - 奇怪的 SQL 错误 int 参数转换为 nvarchar

c# - MVC 4 中的只读属性

c# - INotifyPropertyChanged 不适用于 ObservableCollection<Class> 中的类

c# - 我应该为小型 dotnet 应用程序使用什么数据库?