0

以前に解決した問題がありました。質問に答えてくれたみんな、どうもありがとう。

Android アプリケーションからサーバー (サーブレット) に画像をアップロードしようとしています。1 つの jpeg 画像を含む SD カードもエミュレートしました。

サーバーに接続してメッセージを返すことができました。しかし、これまでのところ、サーバー上の画像を取得できませんでした。サーバーでエラー メッセージが表示されます。マルチパートオプションを使用しています。コードは次のとおりです。Plzを見て、私が何をしているのか教えてください。

アンドロイド側

     String path="http://10.0.2.2:8080/ImageLocalizer/Localize";
        String pathToFile="/sdcard/building.jpg";
        text1.setText(path);

        int bytesRead, bytesAvailable, bufferSize;
        byte[] buffer;
        int maxBufferSize = 1*1024*1024;
        try
        {
        FileInputStream fileInputStream = new FileInputStream(new File(pathToFile) );

        URL url = new URL(path);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();

        // Allow Inputs & Outputs
        connection.setDoInput(true);
        connection.setDoOutput(true);
        connection.setUseCaches(false);

        // Enable POST method
        connection.setRequestMethod("POST");

        connection.setRequestProperty("Connection", "Keep-Alive");
        connection.setRequestProperty("Content-Type",  "multipart/form-data");
        connection.setRequestProperty("FileName", "building.jpg");

        DataOutputStream outputStream =new DataOutputStream( connection.getOutputStream());
        bytesAvailable = fileInputStream.available();
        bufferSize = Math.min(bytesAvailable, maxBufferSize);
        buffer = new byte[bufferSize];

        // Read file
        bytesRead = fileInputStream.read(buffer, 0, bufferSize);

        while (bytesRead > 0)
        {
            outputStream.write(buffer, 0, bufferSize);
            bytesAvailable = fileInputStream.available();
            bufferSize = Math.min(bytesAvailable, maxBufferSize);
            bytesRead = fileInputStream.read(buffer, 0, bufferSize);
        }

        fileInputStream.close();
        outputStream.flush();
        outputStream.close();
        text1.setText(path);

        BufferedReader in =new BufferedReader(new InputStreamReader( connection.getInputStream() ) );

        String response="",msg="";
        while ( (response = in.readLine()) != null ) {
            msg+=response;
        }
        text2.setText(msg);
    }        
    catch (Exception ex)
     {}

    }

サーブレット側

   doPost()
    {
            System.out.println("RUNNING");
             InputStream in = request.getInputStream();
                BufferedReader r = new BufferedReader(new InputStreamReader(in));
                StringBuffer buf = new StringBuffer();
                String line;

                PrintWriter out = response.getWriter();
                out.println("Image copied !!");
                out.close();
                try  
                {  
                        PrintWriter out1=response.getWriter();  
                        FileItemFactory factory = new DiskFileItemFactory();  
                        ServletFileUpload upload = new ServletFileUpload(factory);  
                        String s[]=new String[30];  
                        byte i=0;  
                        boolean isMultipart = ServletFileUpload.isMultipartContent(request);  
                        if(isMultipart)  
                        {  
                            List items=upload.parseRequest(request);      
                            Iterator iterator=items.iterator();  
                            while(iterator.hasNext())  
                            {  
                                FileItem fitem=(FileItem)iterator.next();  
                                if(!fitem.isFormField())  
                                {  
                                    StringBuffer s2=new StringBuffer(fitem.getName());                    
                                    if(s2!=null && s2.length()>0)  
                                    {  
                                        File fl=new File("H:\\abcd.jpg");  
                                        fitem.write(fl);  
                                    }  
                                }  
                                if(fitem.isFormField())  
                                {  
                                    s[i]=fitem.getString();  
                                    i++;  
                                }  
                            }  

                        }  

                }catch(Exception e){e.printStackTrace();}  


    }
4

1 に答える 1

0

あなたのリクエストの本文がマルチパートフォームデータとして修正されているとは思いません。本文には、区切り記号で区切られた複数のセクションを含める必要があります。各セクションには、そのセクションのファイル名とエンコードが含まれます。例については、次の URL を参照してください。

http://chxo.com/be2/20050724_93bf.html

一度に 1 つのファイルのみを投稿する場合は、マルチパート フォームのデータ ヘッダーを削除し、ファイルの内容を要求本文として投稿します。

于 2012-05-13T08:12:31.440 に答える