Java 将图像上传到Android中的服务器,无需使用截击将其编码到Base64
我有一个安卓系统的上传程序,它上传一个图像文件(通过一个算法加密到400字节),但该文件必须被解码为base64字符串,以字符串形式保存到mysql数据库,并将图像上传到文件夹 问题是,在将文件解码为Java 将图像上传到Android中的服务器,无需使用截击将其编码到Base64,java,php,android,mysql,encryption,Java,Php,Android,Mysql,Encryption,我有一个安卓系统的上传程序,它上传一个图像文件(通过一个算法加密到400字节),但该文件必须被解码为base64字符串,以字符串形式保存到mysql数据库,并将图像上传到文件夹 问题是,在将文件解码为base64字符串后,它会松开其字节加密的算法格式。(图像大小从400字节减少到更少) 这就是我所做的: Bitmap b = this.toGrayscale(mRegisterImage); //this image file is 400byte encrypted uploadImage(
base64
字符串后,它会松开其字节加密的算法格式。(图像大小从400字节减少到更少)
这就是我所做的:
Bitmap b = this.toGrayscale(mRegisterImage); //this image file is 400byte encrypted
uploadImage(b);
这是函数uploadimage
public String getStringImage(Bitmap bmp) { //This is what converts the image to 64encoded format string
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos); //Thos is what compresses image hence loosing bytes
byte[] imageBytes = baos.toByteArray();
String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
return encodedImage;
}
private void uploadImage(final Bitmap bmp) {
// Showing the progress dialog
try {
final ProgressDialog loading = ProgressDialog.show(this,
"Uploading fingerprint...", "Please wait...", false, false);
StringRequest stringRequest = new StringRequest(
Request.Method.POST, Config.url,
new Response.Listener<String>() {
@Override
public void onResponse(String s) {
// Disimissing the progress dialog
debugMessage("Return Message: " + s);
loading.dismiss();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
try { // Dismissing the progress dialog
loading.dismiss();
// Showing toast
debugMessage(volleyError.getMessage());
} catch (Exception r) {
debugMessage("onerrorresponse: "+volleyError.getMessage());
}
}
}) {
@Override
protected Map<String, String> getParams()
throws AuthFailureError {
// Converting Bitmap to String
String image = getStringImage(bmp);
// Creating parameters
Map<String, String> params = new Hashtable<String, String>();
// Adding parameters
params.put("image", image);
return params;
}
};
// Creating a Request Queue
RequestQueue requestQueue = Volley.newRequestQueue(this);
// Adding request to the queue
requestQueue.add(stringRequest);
} catch (Exception r) {
debugMessage("out: "+r.getMessage());
}
}
一切都很好,但有没有一种方法,我可以上传实际的图像,而无需在android中使用volley库将其转换为字符串。上面的代码将图像压缩为字符串,我如何更改此压缩以使字节不丢失基本上没有,因为
Http
消息体可以携带字节数据
只能通过Http
协议发送任何其他形式的大数据
Http
使用TCP
传输数据,这种情况下通常使用交换技术。协议可以将数据格式化为位
或字节
级别,其中字节
级别是最常用的级别,因此如果您正在寻找另一种方式,那么您今天就不走运了
因此,即使您使用StringRequest
并将数据作为字符串参数
传递,最终您的每个参数
都会转换为字节数组
类型,因此您无法避免将数据转换为字节。基本上不,因为Http
消息体只能携带字节数据
,所以不能通过Http
协议发送任何其他形式的这种大数据
Http
使用TCP
传输数据,这种情况下通常使用交换技术。协议可以将数据格式化为位
或字节
级别,其中字节
级别是最常用的级别,因此如果您正在寻找另一种方式,那么您今天就不走运了
因此,即使您使用StringRequest
并将数据作为字符串参数
传递,最终您的每个参数
都会转换为字节数组
类型,因此您无法避免将数据转换为字节。挑剔:base64不是加密。这是一种编码。好的,但文件大小不同,原始输出也不同。你的数据库代码基本上完全被破坏了。你不能通过提取所有现有的id并扔掉除最后一个之外的所有id来获得id。另外,插入该url时,您最终得到的$id将不是您创建的新记录的id,因此,通过将所有内容逐个关闭,您正在消除id/url关联。原始文件具有加密主要问题不是数据库,而是以原始格式将文件发送到php时。挑剔:base64不是加密。这是一种编码。好的,但文件大小不同,原始输出也不同。你的数据库代码基本上完全被破坏了。你不能通过提取所有现有的id并扔掉除最后一个之外的所有id来获得id。另外,插入该url时,您最终得到的$id将不是您创建的新记录的id,因此,通过将所有内容逐个关闭,您正在消除id/url关联。原始文件具有加密功能。主要问题不在于数据库,而在于以原始格式将文件发送到php时,上述传输会通知字符串,原始文件是以字节的形式存在的,我如何在不将其转换为字符串格式的情况下传输该字节?请在我的回答中添加更多信息。如果我错了,请纠正我。如果你不同意,请给出答案,与我们分享你的知识。如果你能在上面传输,请通知字符串,原始文件是以字节的形式存在的,我如何在不将其转换为字符串格式的情况下传输该字节呢?请给我的答案添加更多信息。如果我错了,请纠正我。如果可以,请给出答案,与我们分享您的知识
$sql ="SELECT id FROM fingerprint ORDER BY id ASC";
$res = mysqli_query($con,$sql);
$id = 0;
while($row = mysqli_fetch_array($res)){
$id = $row['id'];
}
$path = "$id.png";
$actualpath = "http://simplifiedcoding.16mb.com/PhotoUploadWithText/$path";
$sql = "INSERT INTO fingerprint (value) VALUES ('$actualpath')";
if(mysqli_query($con,$sql)){
file_put_contents($path,base64_decode($image));
echo "Successfully Uploaded";
}