首页 > 编程语言 > 详细

JAVA 文件与base64之间的转化, 以及Web实现base64上传文件

时间:2017-04-05 00:52:47      阅读:756      评论:0      收藏:0      [点我收藏+]

<1>文件与base64字符串之间的转化

package servlet_file_upload;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

/**
 * base64 与 file 之间的相互转化
 * 实现形式, 懒汉式的单例模式
 */
public class Base64UploadClass {
    // 私有化构造器
    private Base64UploadClass() {
    }

    // 事先定义一个变量存放该类的实例
    private static Base64UploadClass fileBase64 = null;

    // 对外暴露一个静态方法获取该类的实例
    public static Base64UploadClass getFileBase64() {
        if (fileBase64 == null) {
            fileBase64 = new Base64UploadClass();
        }
        return fileBase64;
    }

    // 将 file 转化为 Base64
    public String fileToBase64(String path) {
        File file = new File(path);
        FileInputStream inputFile;
        try {
            inputFile = new FileInputStream(file);
            byte[] buffer = new byte[(int) file.length()];
            inputFile.read(buffer);
            inputFile.close();
            return new BASE64Encoder().encode(buffer);
        } catch (Exception e) {
            throw new RuntimeException("文件路径无效\n" + e.getMessage());
        }
    }

    // 将 base64 转化为 file
    public boolean base64ToFile(String base64, String path) {
        byte[] buffer;
        try {
            buffer = new BASE64Decoder().decodeBuffer(base64);
            FileOutputStream out = new FileOutputStream(path);
            out.write(buffer);
            out.close();
            return true;
        } catch (Exception e) {
            throw new RuntimeException("base64字符串异常或地址异常\n" + e.getMessage());
        }
    }
}

<2> servlet 借助 base64 实现文件上传

package servlet_file_upload;

import java.io.File;
import java.io.IOException;
import java.net.URLDecoder;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/Base64UploadServlet")
public class Base64UploadServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public Base64UploadServlet() {
        super();
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 允许跨域访问,并设置请求编码和输出编码为 UTF-8
        response.addHeader("Access-Control-Allow-Origin", "*");
        response.setCharacterEncoding("UTF-8");
        request.setCharacterEncoding("UTF-8");

        // 获取文件将要保存到的文件夹路径
        String path = getServletContext().getRealPath("");
        String filePath = "Upload/";

        // 如果文件夹不存在, 就创建改文件夹
        File file = new File(path + filePath);
        if (!file.exists() && !file.isDirectory()) {
            file.mkdir();
        }

        // 接收base64文件字符串, 以及文件扩展名, 并对文件字符串进行解码
        String fileText = request.getParameter("fileText");
        String fileName = request.getParameter("fileName");
        fileText = URLDecoder.decode(fileText, "UTF-8");
        fileName = System.currentTimeMillis() + "." + fileName;

        // 保存文件返回路径
        Base64UploadClass fileBase64 = Base64UploadClass.getFileBase64();
        if(fileBase64.base64ToFile(fileText, path + filePath + fileName)){
            response.getWriter().write(filePath + fileName);
        } else {
            response.getWriter().write("上传失败");
        }
    }
}

 

JAVA 文件与base64之间的转化, 以及Web实现base64上传文件

原文:http://www.cnblogs.com/lovling/p/6666994.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!