[英]How to upload image to existing MySql database?
我正在創建一個 android 應用程序,我正在嘗試為用戶存儲個人資料圖片。 當用戶注冊時,他被記錄在表中,我在那里插入了一個多字段image
,我將為他存儲圖像。 但我想我在發送查詢時需要使用 PUT 請求方法。 我正在根據用戶 ID 上傳該圖像並驗證每個用戶在注冊時獲得的密鑰 API。 這是我到目前為止所做的:
public function uploadImage($user_id, $image, $status) {
$path = "uploads/$user_id.png";
$actualpath = "http://localhost:8081/timster/uploads/$path";
$stmt = $this->conn->prepare("UPDATE users SET image = $actualpath, status = ? WHERE id = ?");
$stmt->bind_param("sii", $image, $status, $id);
$stmt->execute();
$num_affected_rows = $stmt->affected_rows;
$stmt->close();
return $num_affected_rows > 0;
}
在這里我真的被困住了,我不知道下一步該怎么做。 這就是我發送更新users
表和上傳圖像的查詢的方式。
$app->put('/image/:id', 'authenticate', function($user_id) use ($app) {
// check for required params
verifyRequiredParams(array('image', 'status'));
global $user_id;
$image = $app->request->put('image');
$status = $app->request->put('status');
$db = new DbHandler();
$response = array();
$result = $db->uploadImage($user_id, $image, $status);
if ($result) {
$response["error"] = false;
$response["message"] = "Image uploaded successfully";
} else {
$response["error"] = true;
$response["message"] = "Image failed to upload";
}
echoRespnse(200, $response);
});
我沒有運行它來檢查它是否正常工作,但我確定我需要在函數uploadImage()
添加更多內容。
因此,例如,這就是發送 PUT 請求時我的 url 的外觀。 http://localhost:8081/timster/v1/image/2
。 最后一個數字是我要上傳新圖像的用戶的 ID。
這是我之前開發的一些代碼,用於將圖像上傳到 PHP 服務器,希望有所幫助。
第一步創建php服務器端:
<?php
// Get image string posted from Android App
$base=$_REQUEST['image'];
// Get file name posted from Android App
$filename = $_REQUEST['filename'];
// Decode Image
$binary=base64_decode($base);
header('Content-Type: bitmap; charset=utf-8');
// Images will be saved under './uplodedimages' folder
$file = fopen('uploadedimages/'.$filename, 'wb');
// Create File
fwrite($file, $binary);
fclose($file);
echo 'Image upload complete, Please check your php file directory';
?>
第二步創建一個 IntentService 來上傳你的照片:
public class SendImageServer extends IntentService {
//Local variables
private Bitmap mBitmap;
private int result;
private String photoName;
public SendImageServer() {
super(Constants.INTENT_SERVICE_CLASS_NAME);
}
@Override
protected void onHandleIntent(Intent intent) {
try {
String filePath = intent.getStringExtra(Constants.INTENT_SERVICE_FILE_PATH);
java.util.UUID photoNameUUID = java.util.UUID.randomUUID();
photoName = photoNameUUID.toString()+".png";
BitmapFactory.Options options = null;
options = new BitmapFactory.Options();
options.inSampleSize = 3;
mBitmap = BitmapFactory.decodeFile(filePath.trim(),
options);
mBitmap = Bitmap.createScaledBitmap(mBitmap, Constants.WIDTH_PHOTO, Constants.HEIGHT_PHOTO, true);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
// Must compress the Image to reduce image size to make upload easy
mBitmap.compress(Bitmap.CompressFormat.PNG, 50, stream);
byte[] byte_arr = stream.toByteArray();
// Encode Image to String
String encodedString = Base64.encodeToString(byte_arr, 0);
RequestParams params = new RequestParams();
params.put("image", encodedString);
params.put("filename", photoName);
makeHTTPCall(params);
}
catch (Exception e){
publishResults("", 4,0);
}
}
/**
* Make Http call to upload Image to Php server
* @param params
*/
public void makeHTTPCall(RequestParams params) {
SyncHttpClient client = new SyncHttpClient();
// Don't forget to change the IP address to your LAN address. Port no as well.
client.post(Constants.FILE_UPLOAD_URL,
params,new AsyncHttpResponseHandler() {
// When the response returned by REST has Http
// response code '200'
@Override
public void onSuccess(String response) {
result = Constants.RESULT_OK;
publishResults(Constants.URL_IMAGES_REPOSITORY + photoName, result, 0);
}
// When the response returned by REST has Http
// response code other than '200' such as '404',
// '500' or '403' etc
@Override
public void onFailure(int statusCode, Throwable error,
String content) {
// When Http response code is '404'
if (statusCode == 404) {
result = Constants.RESULT_FAIL_404;
publishResults(Constants.EMPTY_TAG, result, statusCode);
}
// When Http response code is '500'
else if (statusCode == 500) {
result = Constants.RESULT_FAIL_500;
publishResults(Constants.EMPTY_TAG, result, statusCode);
}
// When Http response code other than 404, 500
else {
result = Constants.RESULT_FAIL;
publishResults(Constants.EMPTY_TAG, result, statusCode);
}
}
});
}
private void publishResults(String mUrl, int result, int statusCode) {
Intent intent = new Intent(Constants.NOTIFICATION);
intent.putExtra(Constants.INTENT_SERVICE_PHOTO, mUrl);
intent.putExtra(Constants.INTENT_SERVICE_RESULT, result);
intent.putExtra(Constants.INTENT_SERVICE_STATUS_CODE, statusCode);
sendBroadcast(intent);
}
}
第三步調用IntentService:
Intent intent = new Intent(this, SendImageServer.class);
// add info for the service which file to download and where to store
intent.putExtra(Constants.INTENT_SERVICE_FILE_PATH, mFilePath);
startService(intent);
第四步創建一個廣播接收器來傳遞上傳結果:
private BroadcastReceiver mReceiverPhoto = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
if(mProgDialog.isShowing())
{
mProgDialog.dismiss();
}
if (bundle != null) {
String mUrl = bundle.getString(Constants.INTENT_SERVICE_PHOTO);
int resultCode = bundle.getInt(Constants.INTENT_SERVICE_RESULT);
int statusCode = bundle.getInt(Constants.INTENT_SERVICE_STATUS_CODE);
if (resultCode == Constants.RESULT_OK) {
mUser.setmProfilePhoto(mUrl);
((NewUserActivity) context).setPhoto(mUrl);
}
else if (resultCode == Constants.RESULT_FAIL_404) {
Toast.makeText(getApplicationContext(),
getString(R.string.constants_resource_not_found_error),
Toast.LENGTH_LONG).show();
}
else if (resultCode == Constants.RESULT_FAIL_500) {
Toast.makeText(getApplicationContext(),
getString(R.string.constants_server_error),
Toast.LENGTH_LONG).show();
}
else if (resultCode == Constants.RESULT_FAIL) {
Toast.makeText(
getApplicationContext(),
getString(R.string.constants_generic_http_error)
+ statusCode, Toast.LENGTH_LONG)
.show();
}else {
Toast.makeText(NewUserActivity.this, getString(R.string.constants_download_failed),
Toast.LENGTH_LONG).show();
}
}
}
};
第五步 注冊您的廣播接收器:
registerReceiver(mReceiverPhoto, new IntentFilter(Constants.NOTIFICATION));
不要忘記在不再需要時取消注冊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.