Tôi có cơ sở dữ liệu từ xa với MySQL và tôi lưu trữ ảnh của người dùng ứng dụng của tôi trên cơ sở dữ liệu dưới dạng hàng của cơ sở dữ liệu với loại LONGTEXT.Làm thế nào để sử dụng BLOB với JSON và PHP?
Tôi chuyển ảnh thành chuỗi bằng Base64.
Tôi kết nối với cơ sở dữ liệu từ xa với JSON và PHP, bởi vì điều này, tôi phải sử dụng Base64, vì như tôi biết, JSON và PHP cần gửi chuỗi trên tham số và Base64 tôi có thể biến ảnh thành chuỗi.
Nó hoạt động tốt, nhưng nó rất chậm. Khi tôi tải một bức ảnh 100 KB, phải mất rất nhiều thời gian, nhưng khi tôi tải một bức ảnh 5 KB chỉ mất hai hoặc ba giây.
Một người bạn bảo tôi sử dụng BLOB thay vì Base64, nhưng làm cách nào để sử dụng BLOB với JSON và kết nối PHP với cơ sở dữ liệu? Ngoài ra, tôi cần phải lưu trữ hình ảnh trên một hàng của bảng USER
. Điều này là do người dùng không có đặc quyền tải tệp lên máy chủ từ xa nhưng họ có thể tải lên ảnh bằng cách tải chúng lên dưới dạng một chuỗi trong hàng của bảng USER
.
nhờ
EDIT:
đây là mã nơi phải mất một thời gian looot chờ (nó đợi trong dòng: while ((line = reader.readLine()) != null) {
, nó đang đợi reader.readLine()
)
mã này được một người dùng từ cơ sở dữ liệu từ xa, phải mất một thời gian để hiển thị người dùng trên ứng dụng của tôi
public Friend RetrieveOneUser(String email)
{
Friend friend=null;
String result = "";
//the parameter data to send
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("email",email));
//http post
InputStream is=null;
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(this.BaseURL + this.GetOneUser_URL);
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
}catch(Exception e){
Log.e("log_tag", "Error in http connection "+e.toString());
}
//convert response to string
try{
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result=sb.toString();
}catch(Exception e){
Log.e("log_tag", "Error converting result "+e.toString());
}
//parse json data
try{
JSONArray jArray = new JSONArray(result);
for(int i=0;i<jArray.length();i++)
{
JSONObject json_data = jArray.getJSONObject(i);
friend=new Friend(json_data.getString("email"),json_data.getString("password"), json_data.getString("fullName"), json_data.getString("mobilePhone"), json_data.getString("mobileOperatingSystem"),"",json_data.getString("photo"));
}
}
catch(JSONException e){
Log.e("log_tag", "Error parsing data "+e.toString());
}
return friend;
}
Lưu trữ hình ảnh trong cơ sở dữ liệu (thay vì lưu trữ tham chiếu đến tệp trong hệ thống tệp từ xa) có thể là một động thái xấu. Có một câu hỏi rất hay đang xem xét chủ đề này một cách chi tiết: [Lưu trữ hình ảnh trong DB - Yea hoặc Nay?] (Http://stackoverflow.com/questions/3748/storing-images-in-db-yea-or- này) –
tôi không thể lưu trữ một tham chiếu đến một tập tin trong các filesistem từ xa vì USERS của APP không thể tải lên hình ảnh vào sistem từ xa ..... tôi đã nói với nó trong câu hỏi của tôi, tại sao ai đó đã cho tôi một bỏ phiếu tiêu cực ?? – NullPointerException
tại sao người dùng không thể tải ảnh lên hệ thống? – binnyb