다음 컬렉션에는 로컬 저장소의 이미지 경로가 포함되어 있습니다.
public ObservableCollection<string> Paths;
이러한 파일 경로는 사용자가 선택하고 Xamarin Android Player에서 다음과 같이 나타납니다.
/storage/emulated/0/Download/img1.jpg
/storage/emulated/0/Download/img2.jpg
이제 문제는 다음과 같습니다. 선택한 이미지 (경로에 따라)를 서버에 업로드하기 위해 바이트 배열로 변환하고 싶습니다. WPF / ASP.Net에서는 다음 코드로 쉽게 수행 할 수 있습니다.
byte[] Convert = File.ReadAllBytes("somepath...");
그러나 Xamarin.Forms에서 사용할 수있는 것은 없습니다.
Xamarin.Forms에서 로컬 저장소의 실제 경로를 기반으로 이미지를 바이트 배열로 변환하려면 어떤 함수를 사용해야합니까?
----------------------------------------- ----------------------
최신 정보
@asp_net 솔루션 구현 시도 :
내 PCL 프로젝트에서 다음 두 파일을 추가했습니다.
public interface IFileSystem
{
byte[] ReadAllByteS(string path);
}
과
public static class FileUtility
{
public static IFileSystem FileSystem { get; set; }
public static void SetUp(IFileSystem fs)
{
FileSystem = fs;
}
}
Android에서는 다음 파일을 추가했습니다.
class SharedFileSytem : IFileSystem
{
public byte[] ReadAllByteS(string path)
{
return File.ReadAllBytes(path);
}
}
그리고 내가 좀 부분을 등록 / 초기화에 잃었어요 - 내가 추가하는 확신 내가 필요 해요 뭔가를 내에서 MainActivity.cs의 파일을.
base.OnCreate(bundle);
Xamarin.Forms.Forms.Init(this, bundle);
//?
LoadApplication(new App());
현재 PCL 코드에서 다음 코드를 실행하려고 할 때
FileUtility.FileSystem.ReadAllByteS(somepath);
다음과 같은 오류 메시지가 나타납니다.
"object reference not set to an instance of an object"
명확히하기 위해 : System.IO는 사용하는 것처럼 보이는 Portable Class Libraries에서 사용할 수 없습니다. 그러나 물론 "Xamarin.Forms"에서 사용할 수 있습니다.
옵션 :
예
PCL 내에서 인터페이스를 정의하십시오.
public interface IFileSystem
{
byte[] ReadAllByteS(string path);
}
각 플랫폼 (또는이 경우 모든 플랫폼에 대한 공유 프로젝트 내에서)에이를 구현합니다.
// Could also be "IosFileSystem" or "SharedFileSytem"
public class DroidFileSystem : IFileSystem
{
public byte[] ReadAllbytes(string path)
{
return File.ReadAllBytes(path);
}
}
앱이 시작될 때 구현을 등록합니다 (이를 지원하는 라이브러리 가 있습니다).
public static class Utils
{
public IFileSystem FileSystem { get; set; }
public static void SetUp(IFileSystem fs)
{
FileSystem = fs;
}
}
( Utils
PCL에 있지만 SetUp 메서드가 AppDelegate 또는 Main Activity에서 호출됩니다.)
사용해:
Utils.FileSystem.ReadAllBytes(...)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다