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]photo[1]photo[2]。问题是,例如,当我拍摄两张照片时,它只上传其中一张,并且带有size = 0.

在我的代码中,UploadImg()我只显示photo[0],但在“真实”代码中,我for loop在第一个之后使用 a ,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 回答