![](/img/trans.png)
[英]how to upload image to server without converting to Base64 in Android?
[英]Upload an image to server in Android without encoding to Base64 using Volley
我在android中有一個上傳器,它上傳了一個圖像文件(由算法加密到400bytes)但文件必須被解碼為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());
}
}
這是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";
}
一切都很好但有一種方法,我可以上傳實際圖像,而無需使用排球庫將其轉換為Android中的字符串。 上面的代碼將圖像壓縮為字符串,如何更改此壓縮以使字節不丟失
基本上沒有,因為Http
消息體只能攜帶byte data
所以不能通過http
協議發送任何其他形式的這種大數據。
Http
通過使用TCP
傳輸數據,在這種情況下使用通常的switching techniques
。 協議在形式的數據bit
或byte
,其中平byte
級主要用於所以如果你在尋找另一種方式,那么你的運氣今天
因此,即使您使用StringRequest
並將數據作為字符串parameter
傳遞,最終您的每個parameter
都將轉換為byte array
類型,因此您無法避免將數據轉換為字節。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.