2011-04-27 5 views
1

В моем приложении для Android мне нужно загрузить изображение в папку Assets/Drawable/raw на сервер. Я попробовал следующее:Изображение, загруженное с места для приложения Android, кажется поврежденным

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, изображение загружается на сервер.

Во всяком случае, изображение на сервере, кажется, поврежден - (. Закачанном в «другом» блоке «если» блок изображение не поврежденный) только для изображения по умолчанию

Я также попытался размещение по умолчанию .png в «сырой» папку и попытался ниже

fileInputStream = ctx.getResources().openRawResource(R.drawable.default); 

Тот же результат здесь - изображение на сервере поврежден.

Я начинаю сомневаться, если это потому, что default.png находится в прикладном пространстве.

Могу ли я получить некоторую помощь по правильному способу загрузки изображения в пространство приложения (drawable/asset/raw)?

спасибо!

Ними

ответ

0

Это, возможно, придется делать с размером буфера? Я попробовал два разных метода для чтения/записи png из папки с ресурсами, и оба они создали рабочий образ. Я использовал FileOutputStream для записи на SD-карту, но это не должно быть проблемой.

InputStream is, is2; 
FileOutputStream out = null, out2 = null; 
try { 
    //method 1: compressing a Bitmap 
    is = v.getContext().getAssets().open("yes.png"); 
    Bitmap bmp = BitmapFactory.decodeStream(is); 
    String filename = Environment.getExternalStorageDirectory().toString()+File.separator+"yes.png"; 
    Log.d("BITMAP", filename); 
    out = new FileOutputStream(filename); 
    bmp.compress(Bitmap.CompressFormat.PNG, 90, out); 

    //method 2: Plain stream IO 
    String filename2 = Environment.getExternalStorageDirectory().toString()+File.separator+"yes2.png"; 
    out2 = new FileOutputStream(filename2); 
    Log.d("BITMAP", filename2); 
    int r, i=0; 
    is2 = v.getContext().getAssets().open("yes.png"); 
    while ((r = is2.read()) != -1) { 
    Log.d ("OUT - byte " + i, "Value: " + r); 
    out2.write(r); 
    i++; 
    } 

} catch (IOException e) { 
    e.printStackTrace(); 
} finally { 
    try { 
    if (out != null) 
     out.close(); 
    if (out2 != null) 
     out2.close(); 
    } catch (IOException e) { 
    e.printStackTrace(); 
    } 
} 
+0

Привет, Алеадам, спасибо за подробный ответ. Я пробовал в обоих направлениях, с небольшой разницей - пытался записать в DataOutputStream HttpURLConnection. Не повезло. Во всяком случае, я чувствую, что вы правы в том, что если он записывается в SDCard из прикладного пространства, он также должен быть доступен для записи на сервер. Будете продолжать. – nimmi

 Смежные вопросы

  • Нет связанных вопросов^_^