programacion - mostrar imágenes en listview de android desde servidor
¿Cómo subir imágenes al servidor en Android? (1)
Estoy usando esto:
public class HttpClient extends AsyncTask<Void, Integer, Long> {
private static final int PROGRESS_DIALOG = 0;
public ProgressDialog dialog;
public File file;
protected Long doInBackground(Void... params) {
for (File file : files) {
foto = "/sdcard/CameraExample/" + file.getName();
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(urll);
MultipartEntity mpEntity = new MultipartEntity(
HttpMultipartMode.BROWSER_COMPATIBLE);
mpEntity.addPart("form_file", new FileBody(file, "image/jpeg"));
httppost.setEntity(mpEntity);
HttpResponse response;
try {
response = httpclient.execute(httppost);
HttpEntity resEntity = response.getEntity();
if (resEntity != null) {
}
if (resEntity != null) {
resEntity.consumeContent();
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
protected void onPostExecute(Long unused) {
progressDialog.dismiss();
((Runnable) ctx ).run();
super.onPostExecute(unused);
}
protected void onPreExecute() {
progressDialog = new ProgressDialog(ctx);
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setMessage("Загрузка фото...");
progressDialog.setProgress(0);
progressDialog.setMax(count);
progressDialog.show();
}
}
Este código usando esa biblioteca:
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.apache.james.mime4j.message.Message;
Puedes encontrar esto en Google. Si no encuentra, puedo enviarle estas bibliotecas.
Estoy intentando cargar Captura de imagen por cámara en el servidor. el servidor envía el código de respuesta = 200 pero la imagen no se carga en el servidor.
El código es:
private boolean uploadData() {
int count = this.forumThreadsB.size();
for (int i = 0; i < count; i++)
{
if (isPhoto)
message = "Uploading Shared Items " + (i + 1) + " of " + count;
else
message = "Uploading Shared Items " + (i + 1) + " of " + count;
progressCount = (i * 1000)/count;
Hashtable<?, ?> threadD = (Hashtable<?, ?>)this.forumThreadsB.elementAt(i);
String onlinePath = "http://xyx.com/;
threadid = (String) threadD.get("devicethreadid");
Hashtable<String, String> pairs = new Hashtable<String, String>();
pairs.put("forumid", threadD.get("lmsforumid").toString());
pairs.put("topicid", threadD.get("lmsthreadid").toString());
pairs.put("clientid", LoginHelper.clientid);
String fullfilepath = threadD.get("offlinepath").toString();
int index = threadD.get("offlinepath").toString().lastIndexOf("/");
String filename = fullfilepath.substring(index + 1);
String filetype = "";
if (filename.toLowerCase().contains(".png"))
filetype = "image/png";
else if (filename.toLowerCase().contains(".jpg"))
filetype = "image/jpeg";
else if (filename.toLowerCase().contains(".mp4"))
filetype = "image/mp4";
else if (filename.toLowerCase().contains(".3gp"))
filetype = "image/3gpp";
String boundaryMessage = getBoundaryMessage(BOUNDARY, pairs, fullfilepath, filename, filetype);
String endBoundary = "/r/n--" + BOUNDARY + "--/r/n";
HttpURLConnection conn = null;
DataOutputStream dos = null;
String lineEnd = "/r/n";
String twoHyphens = "--";
int bytesRead, bytesAvailable, bufferSize;
byte[] buffer;
int maxBufferSize = 1*1024*1024;
try
{
URL url = new URL(onlinePath);
conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("Content-Type", "multipart/form-data;boundary="+BOUNDARY);
dos = new DataOutputStream( conn.getOutputStream() );
dos.write( boundaryMessage.getBytes());
File file = new File(fullfilepath.substring(6));
FileInputStream fileInputStream = new FileInputStream(file);
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
buffer = new byte[bufferSize];
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
while (bytesRead > 0) {
dos.write(buffer, 0, bufferSize);
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
}
dos.write(endBoundary.getBytes());
dos.flush();
dos.close();
fileInputStream.close();
} catch (IOException ioe) {
Log.e("SyncUploadDownloadHelper", "Cannot upload file: " + ioe.getMessage(), ioe);
//return false;
}
// Read response
try {
int responseCode = conn.getResponseCode();
if(responseCode == 200){
SQLiteForumDAO forumDAO = new SQLiteForumDAO(mcontext) ;
ForumThreadDTO forumThreadDTO = forumDAO.selectThread(this.threadid);
if(downloadPath!=null && downloadPath.equalsIgnoreCase("null") && downloadPath.equalsIgnoreCase(""))
forumThreadDTO.offlinefilepath = downloadPath;
forumDAO.updateThread(forumThreadDTO);
}
} catch (IOException ioex) {
Log.e("SyncUploadDownloadHelper", "Upload file failed: " + ioex.getMessage(), ioex);
//return false;
} catch (Exception e) {
Log.e("SyncUploadDownloadHelper", "Upload file failed: " + e.getMessage(), e);
//return false;
}
if (i == (this.forumThreadsB.size() - 1)){
this.sendStatus = "true";
progressCount = 1000;
SyncUploadDownloadHelper.this.notifyObservers("SyncUploadDownloadHelper:UploadDataFinish");
}
else
SyncUploadDownloadHelper.this.notifyObservers("SyncUploadDownloadHelper:UploadData");
//return true;
}
return true;
}
Función:
private String getBoundaryMessage(String boundary, Hashtable<String, String> params, String fileField, String fileName, String fileType) {
StringBuffer res = new StringBuffer("--").append(boundary).append("/r/n");
Enumeration<String> keys = params.keys();
while(keys.hasMoreElements()) {
String key = (String)keys.nextElement();
String value = (String)params.get(key);
System.out.println(key + ": " + value);
res.append("Content-Disposition: form-data; name=/"").append(key).append("/"/r/n")
.append("/r/n").append(value).append("/r/n").append("--").append(boundary).append("/r/n");
}
res.append("Content-Disposition: form-data; name=/"").append("file").append("/"; filename=/"").append(fileName).append("/"/r/n")
.append("Content-Type: ").append(fileType).append("/r/n/r/n");
return res.toString();
}
en mi aplicación Capturo una imagen y la guardo en la base de datos. La ruta de guardar la imagen se usa para cargar el archivo de imagen.