C# 如何从url下载照片并保存在Xamarin中
我需要Xamarin调用GetAPI,从url下载照片并将其保存在手机中。 当xamarin调用API时,它会从url下载一张图片,然后将其作为响应返回给xamarin,然后我会将照片保存在手机中 该API是一个C#4.0 MVC。我创建了一个Get API,该API成功下载图像并将其作为FileStreamResult返回 API从url下载图像并返回它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
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
。请记住,您将阻塞正在运行的线程。我强烈建议您将方法设计为始终异步