我试图通过转换为Base64字符串将图像发送到服务器,但是在服务器端压缩图像变得太小之后。
代码:
public String getEncoded64ImageStringFromBitmap(Bitmap bitmap) {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteFormat = stream.toByteArray();
// get the base 64 string
String imgString = Base64.encodeToString(byteFormat, Base64.DEFAULT);
return imgString;
}
Serverside代码:
[AllowAnonymous]
[HttpPost]
public IHttpActionResult UploadFile()
{
string filePath = "No File Uploaded";
HttpRequest httpRequest = HttpContext.Current.Request;
var fileData = httpRequest.Form["fileData"];
try
{
string lUniqueId = DateTime.Now.ToString("ddMMyyyyHHmmssff");
string lFileName = lUniqueId + ".jpeg";
filePath = "~/Uploads/AadharCards/" + lFileName;
byte[] imageBytes = Convert.FromBase64String(fileData);
//Save the Byte Array as File.
File.WriteAllBytes(System.Web.Hosting.HostingEnvironment.MapPath(filePath), imageBytes);
return Ok(filePath);
}
catch (Exception)
{
return Ok(false);
}
}
答案 0 :(得分:0)
代码段似乎非常好。这可以将图像转换为base64。
我认为你可能有3个问题。
使用
Base64.NO_WRAP
代替Base64.DEFAULT
您可以控制或共享服务器端代码。
答案 1 :(得分:0)
您可以使用以下代码。我已经实现了相同的功能。我从Gallery获取图像并转换字节数组中的路径。将imagepath传递给您的服务器。 selectedImage是Gallery的URI路径。
public static byte[] bitmapdata;
private static String imagepath;
Bitmap bitmap = BitmapFactory.decodeFile(selectedImage.toString());
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
bitmapdata = resizeImage(stream.toByteArray());
imagepath = Base64.encodeToString(bitmapdata, Base64.DEFAULT);
/* Resize Image */
byte[] resizeImage(byte[] input) {
Bitmap original = BitmapFactory.decodeByteArray(input, 0, input.length);
Bitmap resized = Bitmap.createScaledBitmap(original, 400, 480, true);
ByteArrayOutputStream blob = new ByteArrayOutputStream();
resized.compress(Bitmap.CompressFormat.JPEG, 50, blob);
return blob.toByteArray();
}