Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.1k views
in Technique[技术] by (71.8m points)

how to Upload image into server in Android?

I am trying to Upload image Capture by Camera into server. server send response code = 200 but Image is not upload into server.

Code is :

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 = "
--" + BOUNDARY + "--
";

            HttpURLConnection conn = null;
            DataOutputStream dos = null;
            String lineEnd = "
";
            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;
}

Function :

private String getBoundaryMessage(String boundary, Hashtable<String, String> params, String fileField, String fileName, String fileType) {
      StringBuffer res = new StringBuffer("--").append(boundary).append("
");
      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(""
")    
       .append("
").append(value).append("
").append("--").append(boundary).append("
");
      }
      res.append("Content-Disposition: form-data; name="").append("file").append(""; filename="").append(fileName).append(""
") 
      .append("Content-Type: ").append(fileType).append("

");

      return res.toString();
     }

in my Application I Capture Image and Save it to Database. path of save image is use to upload image file.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

I using this:

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

}

This code using that library:

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;

You can find this in Google. If you don't find - i can send you this libraries.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...