여기에 나와있는 것처럼 상당한 양의 코드가 있습니다. 내가 변경 한 phonegap 플러그인이 있습니다. Java 부분은 base64 문자열을 출력합니다.Base64 Java에서 손상된 문자열
package org.apache.cordova;
import java.io.ByteArrayOutputStream;
import java.io.File;
import org.apache.cordova.api.Plugin;
import org.apache.cordova.api.PluginResult;
import org.json.JSONArray;
import android.annotation.TargetApi;
import android.graphics.Bitmap;
import android.os.Environment;
import android.util.Base64;
import android.view.View;
public class Screenshot extends Plugin {
@Override
public PluginResult execute(String action, JSONArray args, String callbackId) {
// starting on ICS, some WebView methods
// can only be called on UI threads
final Plugin that = this;
final String id = callbackId;
super.cordova.getActivity().runOnUiThread(new Runnable() {
//@Override
@TargetApi(8)
public void run() {
View view = webView.getRootView();
view.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
view.setDrawingCacheEnabled(false);
File folder = new File(Environment.getExternalStorageDirectory(), "Pictures");
if (!folder.exists()) {
folder.mkdirs();
}
File f = new File(folder, "screenshot_" + System.currentTimeMillis() + ".png");
System.out.println(folder);
System.out.println("screenshot_" + System.currentTimeMillis() + ".png");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] b = baos.toByteArray();
String base64String = Base64.encodeToString(b, Base64.DEFAULT);
String mytextstring = "data:image/png;base64,"+base64String;
System.out.println(mytextstring);
that.success(new PluginResult(PluginResult.Status.OK, mytextstring), id);
}
});
PluginResult imageData = new PluginResult(PluginResult.Status.NO_RESULT);
imageData.setKeepCallback(true);
System.out.println("imageData=============>>>>>"+imageData);
return imageData;
}
}
다음이 문자열을 일부 Javascript로 전달한 다음 서버에 문자열을 보냅니다. 나는 .php 파일이받는 문자열을 검사하고 base64 문자열은 동일합니다. 그러나 base64 문자열을 디코딩하면 손상된 것 같습니다. 더 좋은 예를 들어이 텍스트 파일의 내용을 디코더에 복사하십시오.
http://dl.dropbox.com/u/91982671/base64.txt
참고 : 가리키며 .php 파일이 그것을 데이터 디코딩을 시도 할 때 : 이미지/PNG를, Base64로, 뿅, 난 그냥 당신이 디코더에 붙여의 용이성을 위해 그것을 제거한된다.
디코더는 여기에서 찾을 :
http://www.motobit.com/util/base64-decoder-encoder.asp
내가 생각할 수있는 모든 어떤 이유로 나는 자바에서 올바르게 base64로 문자열을 출력되지 않을 수 있다는 것이다. 아무도 무슨 일이 벌어지고 있니? 또는 무엇이 이것을 일으킬 수 있습니까?
자바 스크립트로 보내기 전에 디코딩과 저장을 시도 했습니까? 아마 Sun Java로 해독 해봐야할까요? 이 링크를 확인하십시오 : http://stackoverflow.com/questions/469695/decode-base64-data-in-java –
압축 단계에서 또는 압축 단계 이전에 손상되었는지 확인하기 위해 인코딩하기 전에 png 이미지를 저장해 보았습니까? ? – gigadot
동일한 결과가 있는지 확인하기 위해 commons-codec Base64 인코더를 사용해 보셨습니까? 이 외부 요구 사항을 가지고는 안되지만 안드로이드 2.1 장치도 지원할 수 있습니다. 이것이 코르도바가 현재 Base64 인코딩에 사용하는 것입니다. –