0

스택 오버플로가 발생합니다. Android에서의 URI 개념은 훌륭합니다. 장치 및 인터넷에서 다른 것들을 가리키는 방식을 추상화하지만주의 깊은 생각이 필요합니다. 그들과 함께 일하기. 나는 너에게 몇 가지 질문을한다.Android에서 retrofit/okhttp 스택을 사용하여 원격 URI 업로드하기

1) 사람들은 일반적으로 자신의 서버에 업로드하기 위해 원격 URI를 어떻게 소비합니까? 제가 생각할 수있는 가장 좋은 점은 원격 URI를 디스크에 다운로드하고 okhttp에 대한 파일 포인터를 제공하는 것입니다. 이 작업을 수행하는 가장 좋은 방법입니까?

2) 두 번째는 로컬 URI와 관련하여보다 기본적인 질문입니다. URI는 다른 것들을 가리킬 수 있으며 파일의 절대 경로는 다양한 종류의 공급자를위한 다양한 장소에 저장됩니다. #getPath를 this link에서 확인하십시오.

okhttp는 절대 파일에서만 작동하므로 okhttp를 통해 파일을 보내는 가장 좋은 방법은이 논리에 해당하는 논리입니다.

아니면 더 좋은 점이 있습니까?

간단히하기 위해 Kitkat 이상을 위해 개발하고 있다고 가정합시다.

답변

1

1) 예. 가장 좋은 방법은 업로드가 완료 될 때까지 액세스 권한을 부여하는 것입니다 (특히 예를 들어 이력서 기능이있는 경우 업로드가 중단되고 나중에 다시 시작될 수있는 경우). 자신의 응용 프로그램. URI는 사라지거나 나중에 사용할 수 없습니다.

2) 예. 1) 파일을 사용하십시오, 그들은 구체적이고 신뢰할 수 있습니다.

편집 :

내 대답은 아주 잘 설명되지 않았 음을 깨달았다 귀하의 의견에 따라. "파일 사용"은 context.openFileOutput("temp_file", 0) 또는 context.getFilesDir()을 사용하여 로컬 응용 프로그램에 파일을 저장하고이 파일을 안전하게 사용할 수 있도록 context.getContentResolver().openInputStream(uri)을 사용하는 것입니다.

URI의 경로를 추측하려고하는 FileUtils의 모든 메소드는 색다른 데다 가장자리의 경우가 있기 때문에 문제가 발생합니다.

+0

파일은 구체적이고 신뢰할 수 있습니다. 그러나 문제는 URI가 절대 파일 경로를 일관성있게 노출하지 않는다는 것입니다. 절대 파일 경로를 찾으려는 시도는 URI가 처음 개발 된 이유와 완전히 반대입니다. Google 드라이브 앱의 콘텐츠 URI에 FileUtils.getPath를 사용했는데이 함수는 null을 반환합니다. 말하자면 경로가 무엇인지 알 수 있습니다. 내일 다른 응용 프로그램이 파일 경로의 다른 위치를 찾으면 .. 경로를 얻기 위해 새 코드를 계속 추가해야합니까? 사용 방법 : –

+0

http://stackoverflow.com/questions/25367888/upload-binary-file-with-okhttp-from-resources –

+0

내 편집을 참조하십시오. 내 대답은 잘 설명되지 않았다. – Budius

관련 문제