0
    String base64Code = dataInputStream.readUTF();

    byte[] decodedString = null;

    decodedString = Base64.decodeBase64(base64Code);


    FileOutputStream imageOutFile = new FileOutputStream(
    "E:/water-drop-after-convert.jpg");
    imageOutFile.write(decodedString);

    imageOutFile.close(); 

問題は、データが完全に転送され、データがテキスト形式の場合は正しく表示されますが、画像をデコードして出力ファイルに書き込もうとすると、フォト ビューアーに表示されないことです。

どんな助けでも大歓迎です

4

2 に答える 2

0

DataInputStream.readUTF が問題である可能性があります。このメソッドは、テキストが DataOutputStream.writeUTF によってファイルに書き込まれたことを前提としています。そうでなく、通常のテキストを読む場合は、BufferedReader や Scanner などの別のクラスを選択してください。または Java 1.7 の Files.readAllBytes。

于 2012-12-09T08:06:00.550 に答える
0

画像をbase 64に変換し、その画像をストリームとして送信する必要がありました(ここでのエンコードとデコードはコードです)

ファイルを base64 に変換するには:

String filePath = "E:\\water-drop-after-convert.jpg";
File bMap =  new File(filePath);
byte[] bFile = new byte[(int) bMap.length()];
        FileInputStream fileInputStream = null;
        String imageFileBase64 = null;

        try {
            fileInputStream = new FileInputStream(bMap);
            fileInputStream.read(bFile);
            fileInputStream.close();
            imageFileBase64 = Base64.encode(bFile);   
        }catch(Exception e){
            e.printStackTrace();
        }

次に、サービス側で、ベース64文字列の画像をファイルに変換して、表示できるようにしました。サーバー側でこのライブラリを使用していましたimport sun.misc.BASE64Decoder;

//filePath is where you wana save image
                String filePath = "E:\\water-drop-after-convert.jpg";
                File imageFile = new File(filePath);
            FileOutputStream fos = null;
            try {
                fos = new FileOutputStream(imageFile);
            } catch (FileNotFoundException e1) {
                e1.printStackTrace();
            }
            BASE64Decoder decoder = new BASE64Decoder();
            byte[] decodedBytes = null;
            try {
                decodedBytes = decoder.decodeBuffer(imageFileBase64);//taking input string i.e the image contents in base 64
            } catch (IOException e1) {
                e1.printStackTrace();
            }
            try {
                fos.write(decodedBytes);
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                fos.flush();
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
于 2012-12-09T07:51:17.507 に答える