之前做上传图片是采用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 + "\n");
- }
- 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。希望对大家有所帮助!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2013-01-24 目前软件的主流方向
2007-01-24 ASP.net新手经常会碰到的问题