私の Android アプリケーションでは、Assets/Drawable/raw フォルダーにある画像をサーバーにアップロードする必要があります。私は次のことを試しました:
InputStream fileInputStream;
if(imageChanged) {
File file = New File("filename");
fileInputStream = new FileInputStream(file);
}else {
fileInputStream = ctx.getAssets().open("default.png");
}
int bytesAvailable;
byte[] buffer = new byte[102400];
while((bytesAvailable = fileInputStream.available()) > 0) {
int bufferSize = Math.min(bytesAvailable, 102400);
if(bufferSize<102400){
buffer = new byte[bufferSize];
}
int bytesRead = fileInputStream.read(buffer, 0,bufferSize);
dos.write(buffer, 0, bytesRead);
}
これはうまく実行されます。入力ストリームを読み取って DataOutputStream にバイトを書き込むことができ、画像がサーバーにアップロードされます。
とにかく、サーバーの画像が破損しているように見えます-デフォルトの画像のみ(「else」ブロックにアップロードされます。「if」ブロックの画像は破損していません)
また、default.pngを「raw」フォルダーに配置して、以下を試しました
fileInputStream = ctx.getResources().openRawResource(R.drawable.default);
ここでも同じ結果 - サーバーのイメージが破損しています。
これが default.png がアプリケーション空間にあるためかどうか疑問に思い始めています。
アプリケーション スペース (drawable/asset/raw) に画像をアップロードする適切な方法を教えてもらえますか?
ありがとう!
ニミ