我有这个活动,用户可以从图库中选择一个图片,或者只是拍一张图片(和其他数据一起)上传到网站。图片上传问题
到目前为止,我遇到了2个不同的问题:
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);
}
}
}
代码这是我的加载图像(无论采取或PIC从图库)到ImageView的。它工作正常。
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将会有一个的AsyncTask来处理HTTP传输,到目前为止,它只是将数据输入一个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传输图像进行编码的方法。来自图库的图片仅在“开放流之前”后失败
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;
}
我在做什么图库图片有问题?为什么不同图片的编码看起来一样?
是的,我非常确定(因为我在编码文件等方面完全是绿色的),这里有很大的改进空间。我只是想用本地资源实现它,因为我发现的大多数示例都使用了来自apache等的外部库(并且我已经在这个应用中使用了很多例子)。 关于图片:我是否需要保存图片才能上传图片?从相机意图中获得的临时uri无效吗? – Frank 2013-03-15 12:24:46
@Frank我不记得任何来自相机意图的临时URI,但我会告诉你,设备之间的捕获行为存在很多不一致之处。例如,这里是我尝试实现它时遇到的问题:http://stackoverflow.com/questions/6390163/deleting-a-gallery-image-after-camera-intent-photo-taken/8555925#8555925 – 2013-03-15 12:30:20
我' m试试这个片段,现在它不会响应我拍摄照片后按下“检查”。屏幕仍然在拍摄的照片上。如果我按“X”取消并返回到我的活动,它确实有效...... – Frank 2013-03-18 12:03:49