2011-11-08 13 views
4

これは繰り返し質問です。スタックオーバーフローには多くの類似の質問がありますが、私はどのようにできるのか理解できないのでこの質問をしていますImageを使ってデータを投稿してください。アンドロイドでファイルをアップロードしてキーと値のペアを投稿するには

画像とともに姓と名字をサーバーに渡したいとします。 今でも私はこれを試しました。

URL connectURL; 
connectURL = new URL("some URL"); 
File sdImageMainDirectory = new File("/sdcard"); 
String existingFileName = sdImageMainDirectory.toString() +"/image.jpg"; 

String lineEnd = "\r\n"; 
String twoHyphens = "--"; 
String boundary = "*****"; 
String Tag="3rd"; 
try 
{ 
    HttpURLConnection conn = (HttpURLConnection) connectURL.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); 

    DataOutputStream dos = new DataOutputStream(conn.getOutputStream()); 

    dos.writeBytes(twoHyphens + boundary + lineEnd); 
    dos.writeBytes("Content-Disposition: form-data; name=\"firstname\"" + lineEnd); 
    dos.writeBytes("Dharmendra"); 
    dos.writeBytes(lineEnd); 

    dos.writeBytes(twoHyphens + boundary + lineEnd); 
    dos.writeBytes("Content-Disposition: form-data; name=\"lastname\"" + lineEnd); 
    dos.writeBytes("Patel"); 
    dos.writeBytes(lineEnd); 

    dos.writeBytes(twoHyphens + boundary + lineEnd); 
    dos.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"" + existingFileName +"\"" + lineEnd); 
    dos.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"" + existingFileName +"\"" + lineEnd); 
    dos.writeBytes(lineEnd); 

    int bytesAvailable = fileInputStream.available(); 
    int maxBufferSize = 1024; 
    int bufferSize = Math.min(bytesAvailable, maxBufferSize); 
    byte[] buffer = new byte[bufferSize]; 

    int 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.writeBytes(lineEnd); 
    dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); 

    fileInputStream.close(); 
    dos.flush(); 
    dos.close(); 
}catch (MalformedURLException ex) { 
    Log.e(Tag, "error: " + ex.getMessage(), ex); 
} 
catch (IOException ioe) { 
    Log.e(Tag, "error: " + ioe.getMessage(), ioe); 
} 
+0

。それはそこにあるはずですか?私は2行目が 'Content-Type'を設定しているはずだと思います。 – Thor84no

+0

これは私が試したこのリピートラインには問題ありません – Dharmendra

+0

@Dharmendra私の投稿を確認しましたか? – Venky

答えて

11

チェックこのコード:ビットマップは、ビットマップとしてあなたです

public class Task_TurnoutPost extends AsyncTask<Void, Void, Void> { 
     private final ProgressDialog dialog = new ProgressDialog(ActivityName.this); 
     JSONObject object_feed; 
     // can use UI thread here 
     protected void onPreExecute() { 
      this.dialog.setMessage("Loading..."); 
      this.dialog.setCancelable(false); 
      this.dialog.show(); 
     } 

     @Override 
     protected Void doInBackground(Void... arg0) { 
      // TODO Auto-generated method stub 
      try { 

       HttpClient httpClient = new DefaultHttpClient(); 
       HttpPost postRequest = new HttpPost("Your LINK"); 
       MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 
       reqEntity.addPart("F_Name", new StringBody("F_Name")); 
       reqEntity.addPart("L_Name",new StringBody("L_NAME")); 
       try{ 
        ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
        bitmap.compress(CompressFormat.JPEG, 75, bos); 
        byte[] data = bos.toByteArray(); 
        ByteArrayBody bab = new ByteArrayBody(data, "forest.jpg"); 
        reqEntity.addPart("picture", bab); 
       }catch(Exception e){ 
        //Log.v("Exception in Image", ""+e); 
        reqEntity.addPart("picture", new StringBody("")); 
       } 

       postRequest.setEntity(reqEntity); 
       HttpResponse response = httpClient.execute(postRequest); 
       BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8")); 
       String sResponse; 
       StringBuilder s = new StringBuilder(); 
       while ((sResponse = reader.readLine()) != null) { 
        s = s.append(sResponse); 
       } 
       object_feed = new JSONObject(s.toString()); 
       success_response=object_feed.getString("status"); 
       Log.v("Response for POst", s.toString()); 
      } catch (Exception e) { 
       Log.e("e.getClass().getName()", ""+e); 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      if (this.dialog.isShowing()) { 
       this.dialog.dismiss(); 
      } 
     } 

    } 

。二回ファイルの形式データ... `:それに加えて、あなたがライン`のContent-処分を繰り返してライブラリを追加し、download it

Check this for you reference

+0

ありがとうございました – Dharmendra

+0

あなたのコードはうまくいきます...私にとっては非常に面白いです...たくさんありがとうございます... – AndroidRaji

+0

@AndroidRaji Thats hear to hear !!!! – Venky

0

実際には、ここではHTTPヘッダーを使用してキー値のペアを送信します。この

conn.setRequestProperty("firstName", "Stephen"); 
conn.setRequestProperty("lastName", "glansburg"); 

のように続いて、サーバー側で、あなただけのそのメタ情報のHTTPヘッダーを見ることができます。サーバへのイメージのアップロードに付加価値を追加するための

+0

PHPコードにどうやってアクセスするのですか? –

+1

@SamadhanMedge PHPのリクエストからヘッダーを取得する方法については、この記事を参照してください:http://stackoverflow.com/questions/541430/how-do-i-read-any-request-header-in-php –

関連する問題