Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从url下载照片并保存在Xamarin中_C#_Xamarin_Xamarin.forms - Fatal编程技术网

C# 如何从url下载照片并保存在Xamarin中

C# 如何从url下载照片并保存在Xamarin中,c#,xamarin,xamarin.forms,C#,Xamarin,Xamarin.forms,我需要Xamarin调用GetAPI,从url下载照片并将其保存在手机中。 当xamarin调用API时,它会从url下载一张图片,然后将其作为响应返回给xamarin,然后我会将照片保存在手机中 该API是一个C#4.0 MVC。我创建了一个Get API,该API成功下载图像并将其作为FileStreamResult返回 API从url下载图像并返回它 public FileStreamResult DownloadFoto() { Stream r

我需要Xamarin调用GetAPI,从url下载照片并将其保存在手机中。 当xamarin调用API时,它会从url下载一张图片,然后将其作为响应返回给xamarin,然后我会将照片保存在手机中

该API是一个C#4.0 MVC。我创建了一个Get API,该API成功下载图像并将其作为FileStreamResult返回

API从url下载图像并返回它

public FileStreamResult DownloadFoto()
        {

            Stream rtn = null;
            string aURL = "https://image.shutterstock.com/image-vector/sample-stamp-grunge-texture-vector-260nw-1389188336.jpg";
            HttpWebRequest aRequest = (HttpWebRequest)WebRequest.Create(aURL);
            HttpWebResponse aResponse = (HttpWebResponse)aRequest.GetResponse();
            rtn = aResponse.GetResponseStream();
            return File(rtn, "image/jpeg", foto);
        }
沙马林型 HttpConnection是HttpClient的一个实例

var Response = await Application.HttpConnection.GetAsync("DownloadFoto");
                        DependencyService.Get<IFileService>().SavePicture("ImageName.jpg", Response.Content.ReadAsStreamAsync().Result, "imagesFolder");

我没有收到任何错误,它似乎正在保存图像,但当我在“文件管理”中查找它时,我在那里找不到图像。

是的,您使用的目录路径是:

var documentsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
它指向应用程序私有的
/data/user/
中的某个地方。如果您想使用文件浏览器应用程序使其能够浏览,则可能需要将其保存在外部存储(公共存储)中的某个位置

您可以通过以下方式获取该路径:

var externalDir = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDocuments);
如果您的目标是Android API 18及更低版本,请记住在您的AndroidManifest中为其添加权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="18" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18" />
从AndroidAPI23及更高版本,在能够读写外部存储之前,您需要请求权限。您可以使用此插件轻松请求权限:


还有几件事需要注意。您正在对
ReadAsStreamAsync()
调用使用
.Result
。请记住,您将阻塞正在运行的线程。我强烈建议您将方法设计为始终异步。

是的,您使用的目录路径是:

var documentsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
它指向应用程序私有的
/data/user/
中的某个地方。如果您想使用文件浏览器应用程序使其能够浏览,则可能需要将其保存在外部存储(公共存储)中的某个位置

您可以通过以下方式获取该路径:

var externalDir = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDocuments);
如果您的目标是Android API 18及更低版本,请记住在您的AndroidManifest中为其添加权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="18" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18" />
从AndroidAPI23及更高版本,在能够读写外部存储之前,您需要请求权限。您可以使用此插件轻松请求权限:

还有几件事需要注意。您正在对
ReadAsStreamAsync()
调用使用
.Result
。请记住,您将阻塞正在运行的线程。我强烈建议您将方法设计为始终异步