基于Base64的图片转字符串-java和C#互通问题

前一段时间做了一个小项目,把一张图片传到服务器端,功能很简单,服务器端用.net MVC4实现的,客户端是winform程序。

昨天领导说客户端要移植一班Android程序,就花了点时间做了一个,传的时候发现java转出来的字符串跟C#的不一样,还原不了。

因为Base64是一个统一的标准,所以按道理应该是一样的才对。

期初用的是sun.misc.BASE64Encoder类,之后换了java.util.Base64.Encoder类就一致了。

问题解决,贴一下代码

C#:

 1  public static string File2String(string path)
 2         {
 3             if (string.IsNullOrEmpty(path))
 4             {
 5                 throw new Exception("文件路径不能为空!");
 6             }
 7             try
 8             {
 9                 using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
10                 {
11                     byte[] buffByte = new byte[fs.Length];
12                     fs.Read(buffByte, 0, (int)fs.Length);
13                     string str = Convert.ToBase64String(buffByte);
14                     return str;
15                 }
16             }
17             catch (DirectoryNotFoundException ex)
18             {
19                 throw ex;
20             }
21             catch (Exception ex)
22             {
23                 throw ex;
24             }
25         }
26
27         public static bool String2file(string inputString, string path, string filename)
28         {
29             if (string.IsNullOrEmpty(inputString))
30             {
31                 throw new Exception("输入数据不能为空");
32             }
33             if (string.IsNullOrEmpty(path))
34             {
35                 throw new Exception("路径不能为空!");
36             }
37             if (string.IsNullOrEmpty(filename))
38             {
39                 throw new Exception("文件名不能为空!");
40             }
41             try
42             {
43                 byte[] buff = Convert.FromBase64String(inputString);
44                 FileInfo fi = new FileInfo(path + filename);
45                 using (FileStream fs2 = fi.OpenWrite())
46                 {
47                     fs2.Write(buff, 0, buff.Length);
48                     return true;
49                 }
50             }
51             catch (Exception ex)
52             {
53                 throw ex;
54             }
55         }

java:

 1 public static void main(String[] args) {
 2         String s = Getstr();
 3         if(GenerateImage(s))
 4             System.out.println("t");
 5         else
 6             System.out.println("f");
 7     }
 8
 9     private static String Getstr() {
10         String imgFile = "d://test.jpg";
11         InputStream in = null;
12         byte[] data = null;
13
14         try {
15             in = new FileInputStream(imgFile);
16             data = new byte[in.available()];
17             in.read(data);
18             in.close();
19         } catch (IOException e) {
20             e.printStackTrace();
21         }
22
23         Base64.Encoder d = Base64.getEncoder();
24         return d.encodeToString(data);
25     }
26
27     //    base64字符串转化成图片
28     public static boolean GenerateImage(String imgStr) {
29         if (imgStr == null)
30             return false;
31         Base64.Decoder decoder = Base64.getDecoder();
32         try {
33
34             byte[] b = decoder.decode(imgStr);
35             for (int i = 0; i < b.length; ++i) {
36                 if (b[i] < 0) {
37                     b[i] += 256;
38                 }
39             }
40
41             String imgFilePath = "d://new.jpg";
42             OutputStream out = new FileOutputStream(imgFilePath);
43             out.write(b);
44             out.flush();
45             out.close();
46             return true;
47         } catch (Exception e) {
48             return false;
49         }
50     }

ps:import java.util.Base64,这句要在java1.8里才有,如果是1.7或之前版本,可以试试Apache下面的一个Base64的包。

时间: 2024-12-20 12:20:34

基于Base64的图片转字符串-java和C#互通问题的相关文章

Base64 和 图片互转java工具类

package com.fengyunhe.helper.image; import java.io.*; /** * 图片base64互转 * Created by yangyan on 2015/8/11. */ public class ImageBase64Utils { public static String bytesToBase64(byte[] bytes) { return org.apache.commons.codec.binary.Base64.encodeBase64

Delphi 读取 c# webservice XML的base64编码图片字符串转化图片并显示

Delphi 读取 c# webservice XML的base64编码图片字符串转化图片并显示 在 开发中遇到应用c#及asp.net的在的webservice 保存图片并以xml文件形式现实出来 并用delphi调用 的方法: 1.c#的webservice现实见 http://www.greensoftcode.net/techntxt/20127118441582992373 之前的文章. 2.在客户端用delphi显示 发现asp.net xml形式输出的图片是base64字符串形式.

java图片以字符串的形式传输

最近在做一个中间件,用到了图片的传输. 原理:将图片转换为字节流,再将字节流用base64编码,将编码后的字符串封装到Json串中传输: 代码: package com.inlz; import java.io.FileInputStream; import java.io.IOException; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; /** * Description:用此类将图片转换为字符串,以便将图片封

基于opencv将视频转化为字符串Java版

基于opencv将视频转化为字符串Java版 opencv java 先上一个效果图吧 首先,弄清一下原理 我们要将视频转化为字符画,那么就需要获取画面的每一帧,也就是每一张图片,然后将图片进行转化,变成字符串,然后进行打印. 1.获取视频 在opencv中提供了一个函数去获取视频 VideoCapture capture = new VideoCapture("");//里面放图片的地址 //ps:如果里面为0[不要"",就是整数0],则就对默认摄像头进行抓取 M

Java之Base64转为图片

########MD5编码############## public static String genMd5ByBytes(byte[] bytes) throws Exception { String value = null; try { MessageDigest md5 = MessageDigest.getInstance("MD5"); md5.update(bytes); byte b[] = md5.digest(); int i; StringBuffer buf

用Base64编码图片

从此地址http://commons.apache.org/proper/commons-codec/download_codec.cgi 下载commons-codec-1.9-bin.zip 解压取得commons-codec-1.9.jar 将jar包添加到eclipse创建好的Java项目工程中,即可引用jar包中提供的类. public interface BinaryDecoder extends Decoder 接口也可以继承父接口 Base64.java源代码路径: common

springmvc结合base64存取图片到mysql

简介: 1.jsp通过MultipartFile上传图片到后台 2.后台把上传的图片通过base64转换成字符串存到mysql 3.从mysql读取图片字符串,通过base64反转成byte数组,再显示到jsp 1.mysql表结构 2.影射对象 package net.spring.model; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; impor

base64与图片之间的转换

实现:base64与图片之间的转换 + 上传的简单实现 1 package com.thinkive.bank.mass.plat.bus.common.util; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileNotFoundException; 6 import java.io.FileOutputStream; 7 import java.io.IOException; 8 i

基于AsyncTask的图片下载

有一阵子没有写程序,连基本的AsyncTask用法都记不清楚了,复习一下于是有了下面的图片加载类. package com.hitech.download; import java.io.IOException; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import or