2

カメラから撮影した複数の画像をアップロードしようとしています。私は経由してカメラを呼び出しますIntent

public void TakePicture(int actionCode)
    {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        try
        {
            photo[0] = createTemporaryFile("spot", ".jpg");
        }
        catch(Exception e)
        {
            Log.v("ERROR SD!!", "Can't create file to take picture!");
            Toast.makeText(this, "Please check SD card! Image shot is impossible!", 10000);
        }

        fileUri = Uri.fromFile(photo[0]);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
        startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
    }

そして、それをPHPサーバーにアップロードします。

public void UploadImg()
    {
         HttpURLConnection conn = null;
         DataOutputStream dos = null;
         DataInputStream inStream = null; 

         // String exsistingFileName = "/sdcard/prueba.png";  --> Used for local files!!

         String lineEnd = "\r\n";
         String twoHyphens = "--";
         String boundary =  "*****";

         int bytesRead, bytesAvailable, bufferSize;
         byte[] buffer;
         int maxBufferSize = 1*1024*1024;
         String urlString = "http://myUrl.com/uploadimg.php";

         try
         {
             FileInputStream fileInputStream = new FileInputStream(photo[0].toString());

             // Open a URL connection to the Servlet
             URL url = new URL(urlString);

             // Open a HTTP connection to the URL
             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.writeBytes(twoHyphens + boundary + lineEnd);
             dos.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"" + photo[0] +"\"" + 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);

             // Close streams
             fileInputStream.close();
             dos.flush();
             dos.close();
         }
         catch (MalformedURLException ex) { Log.e("MediaPlayer", "error: " + ex.getMessage(), ex); }
         catch (IOException ioe) { Log.e("MediaPlayer", "error: " + ioe.getMessage(), ioe); }

      try {
            inStream = new DataInputStream (conn.getInputStream());
            String str;

            while ((str = inStream.readLine()) != null)
            {
                 System.out.println("Server Response" + str);
            }
            inStream.close();
        }
        catch (IOException ioex) { Log.e("MediaPlayer", "error: " + ioex.getMessage(), ioex); }
    }

3つの異なる画像を保存します:photo[0]、、。問題は、たとえば2枚の写真を撮ると、そのうちの1枚とがアップロードされるだけであるということです。photo[1]photo[2]size = 0

のコードでは、UploadImg()のみを示していますphoto[0]が、「実際の」コードではfor loop、最初のコードの後に​​を使用しtryて、撮影したすべての画像をアップロードします。

私が間違っていることについて何か考えはありますか?

事前にどうもありがとうございました!

4

1 に答える 1

0

私はすでに私の問題を解決しました!私は次のことを行いました: を保存する代わりにphoto File、画像の場所を含む文字列に保存します。

if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
            if (resultCode == RESULT_OK) {
                for (int u = 0; u <= 2; u++)
                {
                    if (savedImgs[u].equals(""))
                    {
                        // Saving important info to be used later
                        imgs = u + 1;
                        savedImgs[u] = photo.toString();
                        break;
                    }
                } ...

そして、画像をサーバーにアップロードするときは、次のfor loopようにします。

public void UploadImg()
    {
         HttpURLConnection conn = null;
         DataOutputStream dos = null;
         DataInputStream inStream = null; 

         // String exsistingFileName = "/sdcard/prueba.png";  --> Used for local files!!

         String lineEnd = "\r\n";
         String twoHyphens = "--";
         String boundary =  "*****";

         int bytesRead, bytesAvailable, bufferSize;
         byte[] buffer;
         int maxBufferSize = 1*1024*1024;
         String urlString = "http://myUrl.com/uploadimg.php";

         for (int n = 0; n < imgs; n++)
         {
            try
             {
                 FileInputStream fileInputStream = new FileInputStream(savedImgs[n]);

                 // Open a URL connection to the Servlet
                 URL url = new URL(urlString);

                 // Open a HTTP connection to the URL
                 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.writeBytes(twoHyphens + boundary + lineEnd);
                 dos.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"" + savedImgs[n] +"\"" + 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);

                 // Close streams
                 fileInputStream.close();
                 dos.flush();
                 dos.close();
             }
             catch (MalformedURLException ex) { Log.e("MediaPlayer", "error: " + ex.getMessage(), ex); }
             catch (IOException ioe) { Log.e("MediaPlayer", "error: " + ioe.getMessage(), ioe); }

          try {
                inStream = new DataInputStream (conn.getInputStream());
                String str;

                while ((str = inStream.readLine()) != null)
                {
                     System.out.println("Server Response" + str);
                }
                inStream.close();
            }
            catch (IOException ioex) { Log.e("MediaPlayer", "error: " + ioex.getMessage(), ioex); } 
         }
    }
于 2012-06-11T09:27:55.737 に答える