之前做上传图片是采用HttpServlet上传,不过用了一下Base64上传图片后,感觉比HttpServlet方便很多,大家也可以跟着尝试一下。
前台图片处理:(传Bitmap对象即可)
- /**
- * 通过Base32将Bitmap转换成Base64字符串
- * @param bit
- * @return
- */
- public String Bitmap2StrByBase64(Bitmap bit){
- ByteArrayOutputStream bos=new ByteArrayOutputStream();
- bit.compress(CompressFormat.JPEG, 40, bos);//参数100表示不压缩
- byte[] bytes=bos.toByteArray();
- return Base64.encodeToString(bytes, Base64.DEFAULT);
- }
前台发送数据:(調用setImgByStr()方法,第一個參數imgStr 为Bitmap转成Base64的字符串,第二个参数imgName为图片的名字,包含后缀名.jpg)
- public static String host = "http://192.168.1.166:8080/ImageServer/";
- public static String getContent(String url) throws Exception {
- StringBuilder sb = new StringBuilder();
- HttpClient client = new DefaultHttpClient();
- HttpParams httpParams = client.getParams();
- // 设置网络超时参数
- HttpConnectionParams.setConnectionTimeout(httpParams, 3000);
- HttpConnectionParams.setSoTimeout(httpParams, 5000);
- HttpResponse response = client.execute(new HttpGet(url));
- HttpEntity entity = response.getEntity();
- if (entity != null) {
- BufferedReader reader = new BufferedReader(new InputStreamReader(
- entity.getContent(), "UTF-8"), 8192);
- String line = null;
- while ((line = reader.readLine()) != null) {
- sb.append(line + " ");
- }
- reader.close();
- }
- return sb.toString();
- }
- public static HttpResponse post(Map<String, Object> params, String url) {
- HttpClient client = new DefaultHttpClient();
- HttpPost httpPost = new HttpPost(url);
- httpPost.addHeader("charset", HTTP.UTF_8);
- httpPost.setHeader("Content-Type",
- "application/x-www-form-urlencoded; charset=utf-8");
- HttpResponse response = null;
- if (params != null && params.size() > 0) {
- List<NameValuePair> nameValuepairs = new ArrayList<NameValuePair>();
- for (String key : params.keySet()) {
- nameValuepairs.add(new BasicNameValuePair(key, (String) params
- .get(key)));
- }
- try {
- httpPost.setEntity(new UrlEncodedFormEntity(nameValuepairs,
- HTTP.UTF_8));
- response = client.execute(httpPost);
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- } catch (ClientProtocolException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- } catch (RuntimeException e) {
- e.printStackTrace();
- }
- } else {
- try {
- response = client.execute(httpPost);
- } catch (ClientProtocolException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return response;
- }
- public static Object getValues(Map<String, Object> params, String url) {
- String token = "";
- HttpResponse response = post(params, url);
- if (response != null) {
- try {
- token = EntityUtils.toString(response.getEntity());
- response.removeHeaders("operator");
- } catch (ParseException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return token;
- }
- public static Object setImgByStr(String imgStr,String imgName){
- String url = host+"channel-uploadImage.action";
- Map<String,Object> params = new HashMap<String, Object>();
- params.put("imgStr", imgStr);
- params.put("imgName", imgName);
- return getValues(params, url);
- }
后台接收数据:
- public void uploadPhoto() {
- //获取存储路径
- HttpServletRequest request = ServletActionContext.getRequest();
- String path = ServletActionContext.getServletContext().getRealPath("/")+"upload";
- File file = new File(path);
- if(!file.exists()){
- file.mkdir();
- }
- String imgPath = path + request.getParameter("imgName");
- String imgStr = request.getParameter("imgStr");
- boolean flag = string2Image(imgStr, imgPath);
- JacksonUtil.responseJSON(response, flag);
- }
后台图片处理:
- /**
- * 通过BASE64Decoder解码,并生成图片
- * @param imgStr 解码后的string
- */
- public boolean string2Image(String imgStr, String imgFilePath) {
- // 对字节数组字符串进行Base64解码并生成图片
- if (imgStr == null)
- return false;
- try {
- // Base64解码
- byte[] b = new BASE64Decoder().decodeBuffer(imgStr);
- for (int i = 0; i < b.length; ++i) {
- if (b[i] < 0) {
- // 调整异常数据
- b[i] += 256;
- }
- }
- // 生成Jpeg图片
- OutputStream out = new FileOutputStream(imgFilePath);
- out.write(b);
- out.flush();
- out.close();
- return true;
- } catch (Exception e) {
- return false;
- }
- }
OK ! 如果成功上传前端会接收到true ,反之失败false。希望对大家有所帮助!