-
-
Save utsengar/1276960 to your computer and use it in GitHub Desktop.
import org.apache.commons.codec.binary.Base64; | |
private String encodeFileToBase64Binary(String fileName) | |
throws IOException { | |
File file = new File(fileName); | |
byte[] bytes = loadFile(file); | |
byte[] encoded = Base64.encodeBase64(bytes); | |
String encodedString = new String(encoded); | |
return encodedString; | |
} | |
private static byte[] loadFile(File file) throws IOException { | |
InputStream is = new FileInputStream(file); | |
long length = file.length(); | |
if (length > Integer.MAX_VALUE) { | |
// File is too large | |
} | |
byte[] bytes = new byte[(int)length]; | |
int offset = 0; | |
int numRead = 0; | |
while (offset < bytes.length | |
&& (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) { | |
offset += numRead; | |
} | |
if (offset < bytes.length) { | |
throw new IOException("Could not completely read file "+file.getName()); | |
} | |
is.close(); | |
return bytes; | |
} |
Encode a file into Base64 format
http://www.codesolution.org/?p=299
That solution didn't work.
Base64.encodeBase64(bytes).toString() outputs [B@c163956
Here you are a minimal working implementation
File originalFile = new File("signature.jpg"); String encodedBase64 = null; try { FileInputStream fileInputStreamReader = new FileInputStream(originalFile); byte[] bytes = new byte[(int)originalFile.length()]; fileInputStreamReader.read(bytes); encodedBase64 = new String(Base64.encodeBase64(bytes)); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
Problem solved. Gave file name with location .
String attachment_string= encodeFileToBase64Binary("C:\file_location"+fileName);
Thanks albfan
It doesn't mark error if I add this library to my project: https://commons.apache.org/proper/commons-codec/ I haven't tested yet.
Hi,
I have an HTTP API which returns zip file contents as response which i have encoded in base 64 and passing it to my UI layer written in javascript.
But when I decode the contents using atob functoin in javascript, the contents of zip file is corrupted.
Please help me in solving this problem.
Mine based on @albfan code:
private String encodeFileToBase64Binary(String filePath) { File originalFile = new File(filePath); String encodedBase64; try { FileInputStream fileInputStreamReader = new FileInputStream(originalFile); byte[] bytes = new byte[(int)originalFile.length()]; int numBytesRead = fileInputStreamReader.read(bytes); if (numBytesRead != -1) { // Log.d(TAG, "encodeFileToBase64Binary: could not read all the file"); return null; } encodedBase64 = android.util.Base64.encodeToString(bytes, DEFAULT); return encodedBase64; } catch (IOException e) { e.printStackTrace(); return null; } }
@LightMan pls check your numBytesRead if condition. You're returning null if some bytes read
@albfan, Hi, I am trying this but getting exception,
java.io.FileNotFoundException: android.content.res.AssetManager$AssetInputStream@197e3549: open failed: ENOENT (No such file or directory)
val file = File(Uri.parse(resources.openRawResource(R.raw.rec1).toString()).toString())
var encodedBase64: String? = null
try {
val fileInputStreamReader = FileInputStream(file)
val bytes = ByteArray(file.length().toInt())
fileInputStreamReader.read(bytes)
val result = Base64.encodeToString(bytes, Base64.DEFAULT)
println("result--" + result)
} catch (e: FileNotFoundException) {
e.printStackTrace()
} catch (e: IOException) {
e.printStackTrace()
}
A single line solution
byte[] bytes = Base64.getEncoder().encode(Files.readAllBytes(new File("filePath").toPath()));
System.out.print(bytes);
This is working like a charm, i am not converting image to string i just needed it in encoded format.....Thanks
Why not use Base64.encodeBase64String(bytes)?
Guys cmon this was posted 10 years ago...
hey...thank you so so much brother.its really helpful for me ...:) just need one change in code Base64.encodeBase64String(bytes).. thanx again