简体   繁体   English

我们可以从手机(Android / iOS)中选择一个图像并使用公共代码(Xamarin Forms)将其上传到服务器吗?

[英]Can we pick a Image from Phone (Android / iOS) and upload it to server with common code(Xamarin Forms)?

to achieve this should I go for platform specific code or Can I do that from common code in shared Project of Xamarin.Forms. 要实现这个目标,我应该选择特定于平台的代码,还是可以从共享的Xamarin.Forms项目中的常用代码中实现。

Basically I need to open Gallery and pick a image and then upload it to server in multipart byte array. 基本上我需要打开Gallery并选择一个图像,然后将其上传到多部分字节数组中的服务器。

Couldn't found any examples using Xamarin Forms. 找不到使用Xamarin Forms的任何示例。

I am assuming you are using a PCL solution. 我假设您正在使用PCL解决方案。

There are quite a few ways to do this. 有很多方法可以做到这一点。 Here is the plugin that I used to allow the user to pick an image from the gallery and then do something with that image. 是我用来允许用户从图库中选择图像然后对该图像执行某些操作的插件。

Though you could also use XLabs version as well, available here . 虽然你也可以使用XLabs版本,可以在这里找到

With the plugin I suggested, after installing it into the PCL project, the Android project, and the iOS project, you could write code like this to show an image picker and then do something with that image: 使用我建议的插件,在将其安装到PCL项目,Android项目和iOS项目之后,您可以编写这样的代码来显示图像选择器,然后对该图像执行某些操作:

public List<string> Uris;

private ObservableCollection<MediaFile> _images;
public  ObservableCollection<MediaFile> Images {
    get { return _images ?? (_images = new ObservableCollection< MediaFile >()); }
    set {
        if(_images != value) {
            _images = value;
            OnPropertyChanged();
        }
    }
}

/// <summary>
/// Allows the user to pick a photo on their device using the native photo handlers and returns a stream, which we save to disk.
/// </summary>
/// <returns>string, the name of the image if everything went ok, 'false' if an exception was generated, and 'notfalse' if they simply canceled.</returns>
public async Task<string> PickPictureAsync() {

    MediaFile file      = null;
    string    filePath  = string.Empty;
    string    imageName = string.Empty;

    try {
        file = await CrossMedia.Current.PickPhotoAsync();

        #region Null Check

         if(file == null) { return null; }                                                                                 //Not returning false here so we do not show an error if they simply hit cancel from the device's image picker

        #endregion

        imageName = "SomeImageName.jpg";
        filePath  = /* Add your own logic here for where to save the file */ //_fileHelper.CopyFile(file.Path, imageName);
    } catch(Exception ex) {
         Debug.WriteLine("\nIn PictureViewModel.PickPictureAsync() - Exception:\n{0}\n", ex);                           //TODO: Do something more useful
         return null;
    } finally { if(file != null) { file.Dispose(); } }

    Receipts.Add(ImageSource.FromFile(filePath));

    Uris.Add(filePath);

    return imageName;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM