Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将图像上传到Android中的服务器,无需使用截击将其编码到Base64_Java_Php_Android_Mysql_Encryption - Fatal编程技术网

Java 将图像上传到Android中的服务器,无需使用截击将其编码到Base64

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(

我有一个安卓系统的上传程序,它上传一个图像文件(通过一个算法加密到400字节),但该文件必须被解码为base64字符串,以字符串形式保存到mysql数据库,并将图像上传到文件夹

问题是,在将文件解码为
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";
   }