Как загрузить изображение на сервер в j2me с мобильного телефона по multipart / form-data? - PullRequest
0 голосов
/ 03 ноября 2011

Когда я загружаю номер мобильного телефона и приложения из нескольких частей из данных с мобильного телефона, он попадает на сервер, а данные сохраняются в базе данных. Теперь я добавил захваченное изображение и отправил на сервер, что показывает исключение.

org.apache.commons.fileupload.FileUploadBase$UnknownSizeException: the request was rejected because its size is unknown
    at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:305)
    at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest (ServletFileUpload.java:116)
    at org.apache.jsp.photo_jsp._jspService(photo_jsp.java:103)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:384)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter
(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process (Http11Protocol.java:634)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
    at java.lang.Thread.run(Unknown Source)

Здесь я отправляю номер мобильного телефона и приложения и захваченное изображение в байтах (imagecapturephoto1). Захваченное изображение сохраняется в поле зрения после съемки. Но когда мы загружаем, оно показывает исключение.

try
        {
            System.out.println("url:" + serverUrl);
        connection = (HttpConnection)Connector.open(serverUrl,Connector.READ_WRITE);                          
                connection.setRequestMethod(HttpConnection.POST);

        connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=*****"); 
        connection.setRequestProperty("User-Agent", "Profile/MIDP-2.1 Configuration/CLDC-1.1");
        connection.setRequestProperty("Accept", "application/octet-stream" );

        writer = new DataOutputStream(connection.openDataOutputStream());               
        //  writer =new DataOutputStream( conn.openOutputStream()); 
        String name="applicationNumber", name1="mobileNumber",name3="photo",
                mimeType="text/plain",mimeType2="image/jpeg";

        String value="123456789", value1="9849765432",fileName="applicationphoto.jpeg";
                // write boundary         
                writeString(PREFIX);
                writeString(boundary);
                writeString(NEWLINE);
                // write content header
                writeString("Content-Disposition: form-data; name=\"" + name + "\"");
                writeString(NEWLINE);
                if (mimeType != null) 
                {
                    writeString("Content-Type: " + mimeType);
                    writeString(NEWLINE);
                }
                writeString("Content-Length: " + applicationNumber.length());
                writeString(NEWLINE);
                writeString(NEWLINE);
                // write content
                writeString(applicationNumber);                               
                writeString(NEWLINE);                                        

                // write boundary
                writeString(PREFIX);
                writeString(boundary);                                     
                writeString(NEWLINE);                                    
                // write content header
                writeString("Content-Disposition: form-data; name=\"" + name1 + "\"");
                writeString(NEWLINE);  
                if (mimeType != null) 
                {
                    writeString("Content-Type: " + mimeType);
                    writeString(NEWLINE);
                }
                writeString("Content-Length: " + mobileNumber.length());                
                writeString(NEWLINE);                                                   
                writeString(NEWLINE);                                       
                // write content
                writeString(mobileNumber);                 
                writeString(NEWLINE);  

               //uploading image...........            
              // write boundary
                writeString(PREFIX);                            
                writeString(boundary);      
                writeString(NEWLINE);                                         
                // write content header
                writeString("Content-Disposition: form-data; name=\"" + name3
                        + "\"; filename=\"" + fileName + "\"");
                writeString(NEWLINE);
                if (mimeType2 != null) 
                {
                    writeString("Content-Type: " + mimeType2);
                    writeString(NEWLINE);
                }
                writeString("Content-Length: " + imagecapturephoto1.length);
                writeString(NEWLINE);
                writeString(NEWLINE);                     
                // write content
                // SEND THE IMAGE
                int index = 0;
                int size = 1024;
                do
                {                              
                    System.out.println("write:" + index);
                    if((index+size)<=imagecapturephoto1.length)
                    {
                        writer.write(imagecapturephoto1, index, size);
                    }

                    index+=size;
                }while(index<imagecapturephoto1.length);
                writeString(NEWLINE);


                writeString(PREFIX);
                writeString(boundary);
                writeString(PREFIX);
                writeString(NEWLINE);
                writer.flush();

                //writer.write("-- ***** -- \r\n".getBytes());                
                serverResponseMessage = connection.getResponseMessage();
                InputStream inputstream = connection.openInputStream();
                // retrieve the response from server
                int chnumber;
                StringBuffer sbuffer =new StringBuffer();
                while( ( chnumber= inputstream.read() ) != -1 )
                {
                    sbuffer.append( (char)chnumber );
                }
                String resonsestring=sbuffer.toString(); 
                int end=resonsestring.length();
                int tempstr=resonsestring.indexOf(">");

                statusResponse=resonsestring.substring(tempstr+1, end);
                statusResponse="SUCCESS";
                //outputStream.close();
                writer.close();
                connection.close();
                return serverResponseMessage;
            }
            catch (Exception ex)
            {
                //statusResponse="SUCCESS";
                ex.printStackTrace();
                return null;
            }

Пожалуйста, предложите мне, Как мы должны загрузить изображение с мобильного телефона. Я был поражен за последние 10 дней. Пожалуйста, предложите мне, как решить эту проблему.

Спасибо заранее. -Teja.

1 Ответ

0 голосов
/ 03 ноября 2011

, пожалуйста, попробуйте следующий сегмент кода, пожалуйста, игнорируйте латинское кодирование.

private void postImageToServer(String curURL) throws Exception
    {
        // Open up a http connection with the Web server for both send and receive operations

            midlet.get_frmLog().append("HttpConnection Enter");

            httpConnection = (HttpConnection)Connector.open(URL, Connector.READ_WRITE);

            // Set the request method to POST
            httpConnection.setRequestMethod(HttpConnection.POST);
            // Set the request headers
            httpConnection.setRequestProperty(ConstantCodes.ACTION_MODE_PARAMETER,action);
            httpConnection.setRequestProperty(ConstantCodes.USER_NAME_REQUEST_PARAMETER,userName);

            //httpConnection.setRequestProperty("lat","22.955804");
            //httpConnection.setRequestProperty("lon","72.685876");
            //httpConnection.setRequestProperty("lat",LatLonFetcherThread.getLatitude());
            //httpConnection.setRequestProperty("lon",LatLonFetcherThread.getLongitude());

            /*lat = "23.0172";
            lon = "72.3416";*/

            if ( midlet.get_choiceGroupGPS().getSelectedIndex() == 0 )
            {
                lat = LatLonFetcherThread.getLatitude();
                lon = LatLonFetcherThread.getLongitude();
            }
            else if ( midlet.get_choiceGroupGPS().getSelectedIndex() != 0 )  // Added By KALPEN
            {
                if ( midlet.state == mREPORTER.STATE_READING )
                {
                    double xLat,xLon;
                    try
                    {
                        GpsBt.instance().start();
                        //while (true)
                        {
                            gpsBt = GpsBt.instance();
                            if ( gpsBt.isConnected() )
                            {
                                location = gpsBt.getLocation();

                                //lat = location.utc;
                                //lon = location.utc;

                                lat = (location.latitude + location.northHemi);
                                lon = (location.longitude + location.eastHemi);

                                lat = lat.substring(0,lat.length()-1);
                                lon = lon.substring(0,lon.length()-1);

                                xLat = Double.parseDouble(lat) / (double)100.00;
                                xLon = Double.parseDouble(lon) / (double)100.00;

                                lat = xLat + "";
                                lon = xLon + "";

                                lat = lat.substring(0,7);
                                lon = lon.substring(0,7);

                                //lat = "23.0172";
                                //lon = "72.3416";

                            }
                            Thread.sleep(100);
                        }
                    }
                    catch  ( Exception e ) { lat = "23.0172"; lon = "72.3416"; }
                }
            }

            httpConnection.setRequestProperty("lat",lat); // Modifed by KALPEN
            httpConnection.setRequestProperty("lon",lon); // Modifed by KALPEN

            //String latlongStr = "Latitude: " + LatLonFetcherThread.getLatitude()
            //      + "\nLongitude: " + LatLonFetcherThread.getLongitude();
            /*String latlongStr = "lat: 22.955804" + "lon: 72.685876";*/

            //#style screenAlert
            /*Alert latlonAlert = new Alert("LatLon alert" );
            latlonAlert.setString(latlongStr);
            mREPORTER.display.setCurrent(latlonAlert);*/

            if(eventName == null || eventName.equals(""))
                eventName = "default";

            // all the headers are sending now and connection channel is establising
            httpConnection.setRequestProperty(ConstantCodes.EVENT_NAME_REQUEST_PARAMETER, eventName);
            httpConnection.setRequestProperty(ConstantCodes.CAMERAID_REQUEST_PARAMETER, cameraID);
            httpConnection.setRequestProperty(ConstantCodes.COMPRESSION_MODE_REQUEST_PARAMETER, compressionMode);


            midlet.get_frmLog().append("Write on server-->"+imageBytes.length);

            DataOutputStream dos = httpConnection.openDataOutputStream();
            dos.write(imageBytes);
            midlet.threadFlag=true;
      }

Вышеуказанный метод отлично работает с моим кодом, так как я также пытаюсь загрузить изображение на сервер.

...