私はAndroidアプリを開発しています。私のアプリでは、Retrofitネットワークライブラリを使って複数の画像をサーバーにアップロードしています。ファイルをアップロードする前に、ビットマップから一時ファイルを作成します。その後、アップロード後に削除してください。URI文字列をAndroidのイメージファイルに戻すことができません
photoFiles = new ArrayList<File>();
MultipartBody.Builder requestBodyBuilder = new MultipartBody.Builder().setType(MultipartBody.FORM);
int index = 0;
for(Bitmap bitmap: previewBitmaps)
{
File file = null;
try{
String fileName = String.valueOf(System.currentTimeMillis())+".jpeg";
file = new File(Environment.getExternalStorageDirectory(), fileName); // create temporary file start from here
if(file.exists())
{
file.delete();
}
OutputStream os = new BufferedOutputStream(new FileOutputStream(file));
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, os);
os.close();
photoFiles.add(file);
requestBodyBuilder.addFormDataPart("files",file.getName(), RequestBody.create(MediaType.parse("image/png"),file));
}
catch (Exception e)
{
Toast.makeText(getBaseContext(),e.getMessage(),Toast.LENGTH_SHORT).show();
}
index++;
}
//Upload process goes here and delete files back after upload
上記のコードを使用すると、すべて正常に動作します。しかし、問題は一時ファイルを作成する必要があることです。私は一時ファイルを作成したくありません。私がしたいのは、私がファイルを受け取ったときにUri文字列の配列リストを作成することです。その後、ファイルのアップロード時に、ファイルに戻してアップロードプロセスを行います。
photoFiles = new ArrayList<File>();
MultipartBody.Builder requestBodyBuilder = new MultipartBody.Builder().setType(MultipartBody.FORM);
int index = 0;
for(Bitmap bitmap: previewBitmaps)
{
File file = null;
try{
Uri uri = Uri.parse(photosUriStrings.get(index));
file = new File(getPathFromUri(uri));
Toast.makeText(getBaseContext(),getPathFromUri(uri),Toast.LENGTH_SHORT).show();
photoFiles.add(file);
requestBodyBuilder.addFormDataPart("files",file.getName(), RequestBody.create(MediaType.parse("image/png"),file));
}
catch (Exception e)
{
Toast.makeText(getBaseContext(),e.getMessage(),Toast.LENGTH_SHORT).show();
}
index++;
}
上記のように、私はURI文字列をファイルに変換してからアップロードしています。しかし今回は、ファイルをアップロードすることができません。ファイルもnullではありません。だから私は非常に上の私の古いコードがうまく動作しているので、エラーがuri文字列をイメージファイルに戻して変換していることを確信しています。なぜ私はそれをすることができないのですか? URIから画像ファイルに変換するにはどうしたらいいですか?
私はこの
Convert file: Uri to File in Android
と
Create File from Uri type android
を発見し、両方の作業ではありません。
あなたが望むものは不明です。始めから始めることができます。あなたがアップロードしたいことは何ですか?ファイルまたはビットマップまたは何ですか? – greenapps
ファイルをアップロードします。しかし、私はプレビュー画像を表示する必要があります。そこで私はビットマップに変換しました。しかし、ファイルピッカーの結果コールバックにUri文字列を保存しました。 –
ファイルをアップロードする場合は、そのファイルをアップロードします。プレビュー画像を表示する必要があるのはどういうことですか?ファイルをアップロードするだけです。なぜそれはやっていないのですか? – greenapps