说明:之所以要转换为BASE64是因为我这个涉及到跨系统图片的传输。将file传输到另外一个系统,另外一个系统再进行文件上传。
这之间,从A到B的过程,图片是存在xml中的某个节点中的。到了B系统要进行xml转map的过程。所以在这个过程中,无法从map中取出byte[]或File类型的文件。因为转换过后map取出来的value值无法强转为byte[]或File,所以只能转换为BASE64字符串传值。到了B端再转为byte[]进行文件上传操作
public class FileStreamUtil {
private static String folderUrl;
static BASE64Encoder encoder = new sun.misc.BASE64Encoder();
static BASE64Decoder decoder = new sun.misc.BASE64Decoder();
//将图片以二进制流
public static String fileToBase64(File file) throws IOException
{
BufferedImage bi;
bi = ImageIO.read(file);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(bi, "jpg", baos);
byte[] bytes = baos.toByteArray();
return encoder.encodeBuffer(bytes).trim();
}
/**
* 将二进制转换为byte[]
* @param base64String
*/
public static byte[] base64StringToImage(String base64String){
byte[] bytes = new byte[base64String.length()];
try {
bytes = decoder.decodeBuffer(base64String);
return bytes;
} catch (IOException e) {
e.printStackTrace();
}
return bytes;
}
//将file文件转换为byte[]
public static byte[] fileToByte(File file) throws IOException
{
BufferedImage bi;
bi = ImageIO.read(file);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(bi, "jpg", baos);
byte[] bytes = baos.toByteArray();
return bytes;
}
/**
* 将file写入到目标源:该方法暂时不用
* @param File
*/
public static void writeFile(File file){
try {
byte[] bytes=fileToByte(file);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
BufferedImage bi1 =ImageIO.read(bais); //读取源文件
ImageIO.write(bi1, "jpg", file);//不管输出什么格式图片,此处不需改动
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 文件上传到服务器
* @param bytes
*/
public static void wireteByte(byte[] bytes){
String toUrl="";//目标地址
File w2 = new File(toUrl);//可以是jpg,png,gif格式 "d://base64String.jpg"
try {
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
BufferedImage bi1 =ImageIO.read(bais); //读取源文件
ImageIO.write(bi1, "jpg", w2);//不管输出什么格式图片,此处不需改动
} catch (IOException e) {
LoggerUtil.trace("FileStreamUtil-----","wireteByte---", "上传传输服务器系统出错");
e.printStackTrace();
}
}
/**
* 生成uuid
* 获取fileId
* @return
*/
@SuppressWarnings("unused")
public static String getFileId() {
UUID uuid = UUID.randomUUID();
String fileid = StringUtils.replace(uuid.toString(), "-", "");
return fileid;
}
/**
* 设置nas路径
* @param fileId
* @param uploadFile
* @return
*/
@SuppressWarnings("unused")
public static String getFilePath(String fileId){
String fileType = ".jpg";
String fileName = fileId + fileType;
String dateString = DateFormatUtil.formatDate(new Date(), "yyyyMMdd");
String fileNasPath = folderUrl + "/scms/" + dateString + "/" + fileName;
return fileNasPath;
}
}