갤러리에서 하나의 이미지를 선택하거나 사진을 찍어 다른 데이터와 함께 웹 사이트에 업로드 할 수있는 활동입니다.사진 업로드 관련 문제
지금까지 내가 만난이 다른 문제 : 나는 갤러리에서 사진과 함께 그것을 시도 할 경우
1), 나는 메시지와 함께 IOException를 얻을 /외부/이미지/미디어/2305 : 열려 실패 : ENOENT (해당 파일 또는 디렉토리 없음) 파일 스트림을 열 때 발생합니다. 내가 사진을 촬영하여 시도 할 경우
2), 괜찮아요 간다,하지만 인코딩 된 데이터 문자열은 정말 이상 "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"(하지만 A의)로 구성되고, 그게 좋은 징조하지 같아요. 이것은 웹 사이트에 제대로 업로드 할 수 없기 때문에 추측 일 뿐이지 만 동일한 데이터 문자열을 보여주는 여러 그림이 우스운 냄새를 풍깁니다.
여기
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case TAKE_PICTURE:
if (resultCode == Activity.RESULT_OK) {
//Uri selectedImage = imageUri;
loadImage(imageUri);
}
break;
case SELECT_PHOTO:
if(resultCode == Activity.RESULT_OK){
imageUri = data.getData();
loadImage(imageUri);
}
}
}
코드는 이것은 내가 이미지 (촬영 그림 또는 갤러리에서 하나)를 이미지 뷰 위에로드 방법이다. 괜찮아.
public void loadImage(Uri selectedImage){
mActivity.getContentResolver().notifyChange(selectedImage, null);
ContentResolver cr = mActivity.getContentResolver();
Bitmap bitmap;
try {
bitmap = android.provider.MediaStore.Images.Media
.getBitmap(cr, selectedImage);
ivPicture.setImageBitmap(bitmap);
ivPicture.setVisibility(View.VISIBLE);
mActivity.croutonInfo(selectedImage.toString());
} catch (Exception e) {
mActivity.croutonAlert("Failed to load");
e("Camera " + e.toString());
}
}
이것은 데이터 업로드를 모의하는 데 사용하는 방법입니다. 내가 API를 얻을 때 지금까지 그것은 단지 logicless 전송 객체
public void uploadTapa() throws IOException{
mActivity.croutonInfo("subiendo tapa ");
d("uploadTapa new ");
TapaUploadParametros tup = new TapaUploadParametros();
d("uploadTapa bar: " + nombreBar);
tup.setBarNombre(etBarName.getText().toString());
d("uploadTapa tapa: " + nombreTapa);
tup.setNombre(etTapaName.getText().toString());
d("uploadTapa municipio: " + municipio);
tup.setLocalidad(municipio);
d("uploadTapa provincia: " + provincia);
tup.setProvincia(provincia);
d("uploadTapa tipologiaId: " + tipologiaId);
tup.setTipo(tipologiaId);
d("uploadTapa precioId: " + precioId);
tup.setPrecio(precioId);
String encodedImage = encodeImgForHTTP(imageUri);
d("uploadTapa encoded image: " + encodedImage);
tup.setPic(encodedImage);
d("uploadTapa direccionBar: " + direccionBar);
tup.setBarDireccion(direccionBar);
}
에 데이터를 넣습니다 그리고 이것은 HTTP 전송을위한 이미지를 인코딩 할 수있는 방법은 HTTP 전송을 처리 할 수있는 AsyncTask를이있을 것이다. 갤러리의 이미지가 '스트림을 열기 전'에 만료됩니다.
private String encodeImgForHTTP (Uri imageUri) throws IOException{
ContentResolver cr = mActivity.getContentResolver();
d("encodeImgForHTTP before opening stream ");
FileInputStream fis = new FileInputStream(imageUri.getPath());
d("encodeImgForHTTP after opening stream ");
// Get binary bytes for encode
byte[] imageBytes = new byte[fis.available()];
d("encodeImgForHTTP after getting byte array ");
// base 64 encode for text transmission (HTTP)
d("encodeImgForHTTP pre 64: " + imageBytes);
String data_string = Base64.encodeToString(imageBytes, Base64.URL_SAFE);
d("encodeImgForHTTP before returning the encoded data string " + data_string);
return data_string;
}
갤러리 이미지에 어떤 오류가 있습니까? 다른 그림의 인코딩이 왜 똑같은가요?
그래, 나는 거기에 개선의 여지가 많다는 것을 확신합니다. 방금 네이티브 리소스를 사용하여 구현하고 싶었습니다. 대부분의 예제에서 아파치와 같은 외부 라이브러리를 사용했기 때문에 (그리고 이미이 앱에서 꽤 많이 사용하고 있습니다). 사진 정보 : 사진을 업로드하려면 이미지를 저장해야합니까? 카메라의 의도에서 얻은 임시 URI가 유효하지 않습니까? – Frank
@ 프랭크 카메라의 의도에 따른 임시 URI를 기억하지 못하지만 장치간에이 캡처 동작에 많은 불일치가 있음을 알려드립니다. 예를 들어 여기에 구현하려고 할 때 겪었던 문제가 있습니다. http://stackoverflow.com/questions/6390163/deleting-a-gallery-image-after-camera-intent-photo-taken/8555925#8555925 –
' 이 스 니펫을 시험해보고 이제는 사진을 찍은 후 내 "누르기"에 반응하지 않을 것입니다. 화면은 찍은 사진에 남아 있습니다. 취소하고 다시 내 활동으로 돌아 가기 위해 "X"를 누르면 작동합니다 ... – Frank