2012-01-10 57 views
5

Tôi đang cố gắng Tải lên hình ảnh Chụp bằng Máy ảnh vào máy chủ. máy chủ gửi mã phản hồi = 200 nhưng Hình ảnh không tải lên máy chủ.cách tải hình ảnh lên máy chủ trong Android?

Mã là:

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; 
} 

Chức năng:

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(); 
    } 

trong ứng dụng của tôi, tôi chụp ảnh và lưu nó vào cơ sở dữ liệu. đường dẫn lưu hình ảnh được sử dụng để tải lên tệp hình ảnh.

Trả lời

4

Tôi sử dụng này:

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(); 
    } 

} 

Mã này sử dụng thư viện rằng:

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; 

Bạn có thể tìm thấy điều này trong Google. Nếu bạn không tìm thấy - tôi có thể gửi cho bạn thư viện này.

+0

@Prashant Kadam, bạn có thể tải xuống thư viện từ "http://grepcode.com/snapshot/repo1.maven.org/maven2/org.apache.httpcomponents/httpmime/4.0-beta2/" –

Các vấn đề liên quan