前言:一直想写段代码实现IOS或Android客户端上传图片到Java服务端存到数据库,再从数据库取出下载下来的过程,今天终于忍不住将代码吐了出来,这里仅提供了Javaweb端servlet的响应代码。我觉得客户端用base64转换图片比较简单就在此没有提供,如果需要,留言即可,天天在线。
推荐李刚疯狂系列丛书:http://download.csdn.net/detail/iot_li/9188759
李刚疯狂swift源代码:
http://download.csdn.net/detail/iot_li/9188767
准备:IOS或Android客户端经过base64编码的图片发到服务端。(一定是POST请求才行)
服务端接收并存储图片代码:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//以下代码在测试iOS端上传图片时用的
/*********************IOS上传头像图片----start*****************************/
System.out.println("POST登录请求");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
UserDao dao = new UserDaoImpl();
// 取出用户名、密码
String username = request.getParameter("account");
String password = request.getParameter("password");
//接收网络图片
file=request.getParameter("image_ios");
if(file!=null){
System.out.println("开始处理客户端的图片");
byte[] b= Base64.decodeBase64(file);//系统里的Base64---对客户端base64编码的图片进行解析为字节
//定义图片的存放路径
String filepath=request.getSession().getServletContext().getRealPath("/WebContent/WEB-INF/");
File file2=new File(filepath);
//如果文件路径不存在就会建立这个目录
if(!file2.exists())
file2.mkdirs();
//在创建输出流时给图片重命名
int imageId=(int)(Math.random()*100);
FileOutputStream fos=new FileOutputStream(file2.getPath()+"/person_head"+imageId+".png");
System.out.println(file2.getPath());
//要存储到数据库里的图片路径
String headImage_Path = "/WebContent/WEB-INF/"+("person_head"+imageId+".png");
// 获得DAO接口
HeadimageDao dao2 = new HeadimageDaoImpl();
// 实例化头像图片类
Headimage H = new Headimage();
// 设置头像图片属性
H.setHeadImage_str(headImage_Path);//Integer.parseInt(register_user_pwd));
//将路径数据保存到数据库
dao2.saveHeadimageInfo(H);
fos.write(b);
fos.flush();
fos.close();
}
服务端通过数据库里图片的路径取出图片代码:
//请求后客户端会将图片下载下来。
//在数据库取头像
System.out.print("HeadimageDaoImpl获取头像图片");
ServletOutputStream sout=response.getOutputStream();
// 添加SQL语句
String sql = "select headimage from usertbl where account ="+"'lot'";
// 数据库连接工具类
DBUtil util = new DBUtil();
try {
System.out.print("HeadimageDaoImpl获取头像图片4");
// 获得连接
Connection conn = util.openConnection();
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery(sql);
InputStream in=null;
if(rs.next())
{
//查询数据库相应地字段
in=rs.getBinaryStream("headimage");
byte image[]=new byte[1024];
while(in.read(image)!=-1)
{
sout.write(image);
}
sout.flush();
//sout.close();
rs.close();
stmt.close();
conn.close();
util.closeConn(conn);
System.out.print("获取图片成功2");
}
} catch (SQLException e) {
e.printStackTrace();
sout.println("图片不能显示.<br>");
sout.println("Error : " + e.toString());
} finally {
// util.closeConn(conn);
}
参考资源:
1.上传图片 客户端与 服务端 方案总结
http://blog.csdn.net/user_define_race/article/details/41693301
2.从数据库读出图片:http://blog.csdn.net/lijunlinlijunlin/article/details/40135877