在本地保存图像,然后将文件路径作为字符串保存到 Xamarin Forms 中的数据库中

Save image locally and then save file path as a string into a database in Xamarin Forms

拍完照片/ select一张图片(不管怎样都会覆盖同一个图片变量),将图片保存到本地,然后将文件路径作为字符串保存到变量中插入到现有的 SQLite 数据库中。

我有同样的问题- 这是我如何让它工作的

首先,在您为表格创建列的模型中,确保有一个 属性 作为图像路径的字符串

    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }
    public string Image { get; set; }

然后我们需要一个方法来在本地上传和保存您的图像,另一个方法来获取文件路径并将其设置为字符串。假设这将在您的 code-behind 中,首先添加这些:

public static string photofilename;
    public static string imagePath;
    static SQLiteConnection db;
    YourModel yourmodel = new YourModel(); 

然后是LoadPhoto方法

async void LoadPhotoAsync(FileResult photo)
    {
        // canceled
        string PhotoPath;
        if (photo == null)
        {

            PhotoPath = null;
            return;
        }
        // save the file into local storage
        var newFile = Path.Combine(FileSystem.AppDataDirectory, photo.FileName);
        using (var stream = await photo.OpenReadAsync())
        using (var newStream = File.OpenWrite(newFile))
            await stream.CopyToAsync(newStream);

        PhotoPath = newFile;

    }

然后是 upload/save 照片(在这种情况下,我让用户从设备上传)的方法,我已将其附加到“上传图片”按钮。在这种方法中,我将图像显示到我的 XAML ImageViewer 中的图像,但这对您来说可能不是必需的。

async void Image_ClickedAsync(System.Object sender, System.EventArgs e)
    {
        try
        {
            var photo = await MediaPicker.PickPhotoAsync();
            LoadPhotoAsync(photo);
            photofilename = photo.FileName;
            imagePath = Path.Combine(FileSystem.AppDataDirectory, photofilename);


        }
        catch (FeatureNotSupportedException fnsEx)
        {
            // Feature is not supported on the device
        }
        catch (PermissionException pEx)
        {
            // Permissions not granted
        }
        catch (Exception ex)
        {
            Console.WriteLine($"CapturePhotoAsync THREW: {ex.Message}");
        }
        ImageViewer.Source = imagePath;
        ImageViewer.IsVisible = true;

    }

这样做是打开 MediaPicker,允许用户选择一个图像并将图像路径设置为字符串 imagePath。在我这里的例子中,我还有“ImageViewer”,它是我 XAML 中的一个图像,用于显示图像,但我们还没有完成——我们还没有将它保存到您的 SQLite 数据库中。这是我在“保存”按钮上使用的方法-

        private void SaveEvent(object sender, EventArgs e)
    {
        var databasePath = Path.Combine(FileSystem.AppDataDirectory, "yourdb.db");
        db = new SQLiteConnection(databasePath);
        yourmodel.Image = imagePath;
        db.Insert(yourmodel);
    }

然后,假设您使用 ListView 或绑定到数据库中的表的东西,您将在 XAML 中有一个图像,就像这样

<Image  HeightRequest="340" WidthRequest="550"   x:Name="Image" Source="{Binding Image}"/>

这应该可以解决问题 - 让我知道这是否适合您!