2014-09-10 3 views
0

이미지를 서버에 업로드하는 것에 대한 많은 게시물을 읽었지만 여전히 문제가 있습니다. 내 장치에서 이미지를 선택할 수는 있지만 업로드되지 않았습니다. 나는 실수가 없습니다. 업로드가 성공적이라는 축하 메시지를 받지만 업로드 폴더로 가면 이미지를 찾을 수 없습니다.JSON을 사용하여 Android의 서버에 이미지 업로드

 <ImageView 
      android:id="@+id/profile_picture" 
      android:layout_width="@dimen/profile_pic" 
      android:layout_height="@dimen/profile_info_padd" 
      android:scaleType="fitCenter" 
      android:src="@drawable/ic_launcher" /> 

     <Button 
      android:id="@+id/button_selectpic" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="@string/select_pic_btn" /> 

     <Button 
      android:id="@+id/uploadButton" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="@string/upload_pic_btn" /> 

     <TextView 
      android:id="@+id/messageText" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="" 
      android:textColor="#000000" 
      android:textStyle="bold" /> 


    </LinearLayout> 

ProfilFragment :

ProgressDialog pDialog; 
Button uploadButton, btnselectpic; 
private int serverResponseCode = 0; 
private String upLoadServerUri = null; 
private String imagepath=null; 

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     View rootView = inflater.inflate(R.layout.fragment_profil, container, 
       false); 
     uploadButton = (Button)rootView.findViewById(R.id.uploadButton); 
     btnselectpic = (Button)rootView.findViewById(R.id.button_selectpic); 
     messageText = (TextView)rootView.findViewById(R.id.messageText); 
     btnselectpic.setOnClickListener(this); 
     uploadButton.setOnClickListener(this); 


     upLoadServerUri = "http://My ip address/upload/upload_to_server.php"; 

private void selectProfilPic(){ 
     Intent intent = new Intent(); 
     intent.setType("image/*"); 
     intent.setAction(Intent.ACTION_GET_CONTENT); 
     startActivityForResult(Intent.createChooser(intent, "Complete action using"), 1); 
    } 

    private void uploadProfilPic(){ 

     pDialog = ProgressDialog.show(getActivity(), "", "Uploading file...", true); 
     messageText.setText("uploading started....."); 
     new Thread(new Runnable() { 
        public void run() { 

          uploadFile(imagepath); 

        } 
        }).start();  
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 

     if (requestCode == 1 && resultCode == getActivity().RESULT_OK) { 
       //Bitmap photo = (Bitmap) data.getData().getPath(); 

       Uri selectedImageUri = data.getData(); 
       imagepath = getPath(selectedImageUri); 
       Bitmap bitmap=BitmapFactory.decodeFile(imagepath); 
       profilePic.setImageBitmap(bitmap); 
       messageText.setText("Uploading file path:" +imagepath); 

     } 
     } 

    public String getPath(Uri uri) { 
     String[] projection = { MediaStore.Images.Media.DATA }; 
     @SuppressWarnings("deprecation") 
     Cursor cursor = getActivity().managedQuery(uri, projection, null, null, null); 
     int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
     cursor.moveToFirst(); 
     return cursor.getString(column_index); 
    } 


    public int uploadFile(String sourceFileUri) { 


      String fileName = sourceFileUri; 

       HttpURLConnection conn = null; 
       DataOutputStream dos = null; 
       String lineEnd = "\r\n"; 
       String twoHyphens = "--"; 
       String boundary = "*****"; 
       int bytesRead, bytesAvailable, bufferSize; 
       byte[] buffer; 
       int maxBufferSize = 1 * 1024 * 1024; 
       File sourceFile = new File(sourceFileUri); 

       if (!sourceFile.isFile()) { 

       pDialog.dismiss(); 

       Log.e("uploadFile", "Source File not exist :"+imagepath); 

       getActivity().runOnUiThread(new Runnable() { 
        public void run() { 
        messageText.setText("Source File not exist :"+ imagepath); 
        } 
       }); 

       return 0; 

       } 
       else 
       { 
       try { 

        // open a URL connection to the Servlet 
        FileInputStream fileInputStream = new FileInputStream(sourceFile); 
        URL url = new URL(upLoadServerUri); 

        // Open a HTTP connection to the URL 
        conn = (HttpURLConnection) url.openConnection(); 
        conn.setDoInput(true); // Allow Inputs 
        conn.setDoOutput(true); // Allow Outputs 
        conn.setUseCaches(false); // Don't use a Cached Copy 
        conn.setRequestMethod("POST"); 
        conn.setRequestProperty("Connection", "Keep-Alive"); 
        conn.setRequestProperty("ENCTYPE", "multipart/form-data"); 
        conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); 
        conn.setRequestProperty("uploaded_file", fileName); 

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

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

        dos.writeBytes(lineEnd); 

        // create a buffer of maximum size 
        bytesAvailable = fileInputStream.available(); 

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

        // read file and write it into form... 
        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); 

        } 

        // send multipart form data necesssary after file data... 
        dos.writeBytes(lineEnd); 
        dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); 

        // Responses from the server (code and message) 
        serverResponseCode = conn.getResponseCode(); 
        String serverResponseMessage = conn.getResponseMessage(); 

        Log.i("uploadFile", "HTTP Response is : " 
         + serverResponseMessage + ": " + serverResponseCode); 

        if(serverResponseCode == 200){ 

         getActivity().runOnUiThread(new Runnable() { 
          public void run() { 
           String msg = "File Upload Completed.\n\n See uploaded file here : \n\n" 
             +"C:\\wampserver\\www\\uploads"; 
           messageText.setText(msg); 

           Toast.makeText(getActivity(), "File Upload Complete.", Toast.LENGTH_SHORT).show(); 
          } 
         });     
        }  

        //close the streams // 
        fileInputStream.close(); 
        dos.flush(); 
        dos.close(); 

       } catch (MalformedURLException ex) { 

        pDialog.dismiss(); 
        ex.printStackTrace(); 

        getActivity().runOnUiThread(new Runnable() { 
         public void run() { 
         messageText.setText("MalformedURLException Exception : check script url."); 
          Toast.makeText(getActivity(), "MalformedURLException", Toast.LENGTH_SHORT).show(); 
         } 
        }); 

        Log.e("Upload file to server", "error: " + ex.getMessage(), ex); 
       } catch (Exception e) { 

        pDialog.dismiss(); 
        e.printStackTrace(); 

        getActivity().runOnUiThread(new Runnable() { 
         public void run() { 
         messageText.setText("Got Exception : see logcat "); 
          Toast.makeText(getActivity(), "Got Exception : see logcat ", Toast.LENGTH_SHORT).show(); 
         } 
        }); 
        Log.e("Upload file to server Exception", "Exception : " + e.getMessage(), e); 
       } 
       pDialog.dismiss();  
       return serverResponseCode; 

       } // End else block 
      } 


    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
     case R.id.edit_profil_infos_btn: 
      editProfileInfos(nom.getText().toString(), prenom.getText() 
        .toString(), email.getText().toString(), userID); 
      break; 
     case R.id.button_selectpic: 
      selectProfilPic(); 
      break; 
     case R.id.uploadButton: 
      uploadProfilPic(); 
      break; 
     } 

    } 

나는이 튜토리얼 Upload Image on Server in Android Using JSON

내 레이아웃 fragment_profil을 사용하고 있습니다upload_to_server :

<?php 
    require_once 'DB_Connect.php'; 
    $file_path = "uploads/"; 

    $file_path = $file_path . basename($_FILES['uploaded_file']['name']); 
    if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $file_path)) { 
    mysqli_query("INSERT INTO `user` (image) VALUES ('".$file_path."')"); 
    } else{ 
     echo "fail"; 
    } 
?> 

답변

1

디코드 이미지 압축 및 인코딩과 같은 문자열 :

   mImageCaptureUri = data.getData(); 
       imagepath = getPath(mImageCaptureUri); 

       BitmapFactory.Options options0 = new BitmapFactory.Options(); 
       options0.inSampleSize = 2; 
       // options.inJustDecodeBounds = true; 
       options0.inScaled = false; 
       options0.inDither = false; 
       options0.inPreferredConfig = Bitmap.Config.ARGB_8888; 

       bmp = BitmapFactory.decodeFile(imagepath); 

       ByteArrayOutputStream baos0 = new ByteArrayOutputStream(); 

       bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos0); 
       byte[] imageBytes0 = baos0.toByteArray(); 

       image.setImageBitmap(bmp); 

       encodedImage= Base64.encodeToString(imageBytes0, Base64.DEFAULT); 

그리고 서버 측에서 디코딩 및 폴더에 저장합니다

$base = $_POST["encodedImage"]; 
     if (isset($base)) { 

      $url = "http://xxx.xxx.xxx.xx/uploads/"; 
      $image_name = "img_"."_".date("Y-m-d-H-m-s").".jpg"; 
      $path = $url."".$image_name; // path of saved image 

      // base64 encoded utf-8 string 
      $binary = base64_decode($base); 

      // binary, utf-8 bytes 
      header("Content-Type: bitmap; charset=utf-8"); 

      $file = fopen("../uploads//" . $image_name, "wb"); // 
      $filepath = $image_name; 
      fwrite($file, $binary); 

      fclose($file);   

      $result = mysql_query("INSERT INTO `users` (path) VALUES ('$path', now())"); 


     } 

는 희망이 도움이!

관련 문제