Android - Envoyer fichier Image sur le Serveur de DB
Les utilisateurs à économiser de trois données:
nom, note et image. Comme vous pouvez le voir le code ci-dessous,
J'ai réussi à le code pour envoyer le nom et la note à côté serveur.
Mais, je n'ai aucune idée de comment envoyer un fichier image sélectionné à partir de l'appareil à la serverDB.
public class AddEditWishlists extends Activity {
//Client-Server - Start //////////////////////
//Progress Dialog
private ProgressDialog pDialog;
JSONParser jsonParser = new JSONParser();
EditText inputName;
EditText inputDesc;
//url to create new product
private static String url_create_product =
"http://10.56.43.91/android_connect/create_product.php";
//JSON Node names
private static final String TAG_SUCCESS = "success";
//Client-Server - End //////////////////////
//Define Variables
private EditText inputname;
private EditText inputnote;
private Button upload;
private Bitmap yourSelectedImage;
private ImageView inputphoto;
private Button save;
private int id;
private byte[] blob=null;
byte[] image=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.add_wishlist);
setUpViews();
}
private void setUpViews() {
inputname = (EditText) findViewById(R.id.inputname);
inputnote = (EditText) findViewById(R.id.inputnote);
inputphoto = (ImageView) findViewById(R.id.inputphoto);
Bundle extras = getIntent().getExtras();
if (extras != null) {
id=extras.getInt("id");
inputname.setText(extras.getString("name"));
inputnote.setText(extras.getString("note"));
image = extras.getByteArray("blob");
if (image != null) {
if (image.length > 3) {
inputphoto.setImageBitmap(BitmapFactory.decodeByteArray(image,0,image.length));
}
}
}
//Image Upload Button
upload = (Button) findViewById(R.id.upload);
upload.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, 0);
}
});
//Save the data
save = (Button) findViewById(R.id.save);
//Save하면 발생되는 이벤트
save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (inputname.getText().length() != 0) {
AsyncTask<Object, Object, Object> saveContactTask = new AsyncTask<Object, Object, Object>() {
@Override
protected Object doInBackground(Object... params) {
saveContact();
//Client-Server - Start //////////////////////////////////////
String name = inputname.getText().toString();
String description = inputnote.getText().toString();
//Building Parameters
List<NameValuePair> params1 = new ArrayList<NameValuePair>();
params1.add(new BasicNameValuePair("name", name));
params1.add(new BasicNameValuePair("description", description));
//getting JSON Object
//Note that create product url accepts POST method
JSONObject json = jsonParser.makeHttpRequest(url_create_product, "POST", params1);
//check log cat fro response
Log.d("Create Response", json.toString());
//check for success tag
try {
int success = json.getInt(TAG_SUCCESS);
if (success == 1) {
//successfully created product
//closing this screen
finish();
} else {
//failed to create product
}
} catch (JSONException e) {
e.printStackTrace();
}
//Client-Server - End ////////////////////////////////////
return null;
}
@Override
protected void onPostExecute(Object result) {
finish();
}
};
saveContactTask.execute((Object[]) null);
} else {
AlertDialog.Builder alert = new AlertDialog.Builder(
AddEditWishlists.this);
alert.setTitle("Error In Save Wish List");
alert.setMessage("You need to Enter Name of the Product");
alert.setPositiveButton("OK", null);
alert.show();
}
}
});
}
//If users save data, this will act (data -> db)
private void saveContact() {
if(yourSelectedImage!=null){
ByteArrayOutputStream outStr = new ByteArrayOutputStream();
yourSelectedImage.compress(CompressFormat.JPEG, 100, outStr);
blob = outStr.toByteArray();
}
else{blob=image;}
//Change Text type to string type to save in the DB
SQLiteConnector sqlCon = new SQLiteConnector(this);
if (getIntent().getExtras() == null) {
sqlCon.insertWishlist(inputname.getText().toString(), inputnote.getText().toString(), blob);
}
else {
sqlCon.updateWishlist(id, inputname.getText().toString(), inputnote.getText().toString(),blob);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode,Intent resultdata) {
super.onActivityResult(requestCode, resultCode, resultdata);
switch (requestCode) {
case 0:
if (resultCode == RESULT_OK) {
Uri selectedImage = resultdata.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String filePath = cursor.getString(columnIndex);
cursor.close();
//Convert file path into bitmap image using below line.
yourSelectedImage = BitmapFactory.decodeFile(filePath);
inputphoto.setImageBitmap(yourSelectedImage);
}
}
}
}
Comment puis-je code entre le client et le serveur d'annotation pour envoyer le fichier image?..
Utiliser http-request. Voir github.com/kevinsawicki/....
oui, j'ai déjà utilisé requête http post pour envoyer le nom et la note sur le serveur DB
ma question est comment envoyer des fichiers image sur le serveur à l'aide de la requête http
Je ne vois pas dans votre code que vous utilisez http-request de la bibliothèque. Le lien est l'exemple sur comment envoyer un fichier sur un serveur.
cochez cette ligne "JSONObject json = jsonParser.makeHttpRequest(url_create_product, "POST", params1);"
oui, j'ai déjà utilisé requête http post pour envoyer le nom et la note sur le serveur DB
ma question est comment envoyer des fichiers image sur le serveur à l'aide de la requête http
Je ne vois pas dans votre code que vous utilisez http-request de la bibliothèque. Le lien est l'exemple sur comment envoyer un fichier sur un serveur.
cochez cette ligne "JSONObject json = jsonParser.makeHttpRequest(url_create_product, "POST", params1);"
OriginalL'auteur jung hur | 2013-05-08
Vous devez vous connecter pour publier un commentaire.
Vous pouvez convertir l'image sélectionnée à base 64 chaîne, puis passez la chaîne du serveur, puis dans le serveur pour le décoder,
Vérifier ce code pour convertir une image en base64,Si vous avez l'imageView ensuite, vous pouvez écrire ce code,
MODIFIER
que dans votre code,vous avez le tableau d'octets dans cette ligne,
de sorte que vous pouvez directement écrire cette ligne de code après que,
vérifier mon édité réponse, si vous avez l'imageview ensuite, vous pouvez obtenir le base64 chaîne comme ci-dessus.Vous pouvez écrire ce code une fois que vous obtenez l'image sélectionnée dans l'imageview.
que dois-je faire si je n'ai pas la imageview
Vous n'avez pas besoin d'affichage de l'image, dans votre code, vous avez le tableau d'octets, utilisez donc Base64 classe pour obtenir la chaîne base64, voir mon édité réponse.
où dois-je ajouter que le premier code que vous avez écrit?
OriginalL'auteur Ice Box
J'utilise le code suivant pour télécharger l'image de serveur php. Avis uploadFile de la fonction vous avez juste à passer votre chemin d'accès de l'image de sdcard.
et en php
Espère que ça aide
Vous pouvez seulement vérifier uploadFile() fonction qui sera utile pour vous....
J'obtiens une exception nulle droit à
dos = new DataOutputStream(conn.getOutputStream());
Avez-vous souvenez-vous de définir
conn.setRequestMethod("POST")
etconn.setDoOutput(true)
? Si oui, peut-être que votreconn
objet est null? Votre trace de la pile devrait avoir plus d'indices.OriginalL'auteur Tony Chhabada
OriginalL'auteur ASHISH KUMAR Tiwary
OriginalL'auteur ASHISH KUMAR Tiwary