Android上传图片到服务器并显示(后台用Java处理)
16lz
2022-07-30
Android上传图片(Android Studio)
Fragment界面:
private String img_src;/** * 从相册选取图片 */public void selectImg() { Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); startActivityForResult(intent, SELECT_PHOTO);}@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case SELECT_PHOTO: switch (resultCode) { case RESULT_OK: Uri uri = data.getData(); img_src = uri.getPath();//这是本机的图片路径 ContentResolver cr = getActivity().getContentResolver(); try { Bitmap bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri)); /* 将Bitmap设定到ImageView */ imageView.setImageBitmap(bitmap); String[] proj = {MediaStore.Images.Media.DATA}; CursorLoader loader = new CursorLoader(getContext(), uri, proj, null, null, null); Cursor cursor = loader.loadInBackground(); if (cursor != null) { int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); img_src = cursor.getString(column_index);//图片实际路径 } cursor.close(); } catch (FileNotFoundException e) { Log.e("Exception", e.getMessage(), e); } break; } break; }}public void uploadImage(String path) { new Thread(new Runnable() { @Override public void run() { String uploadurl = SharedPreferencesUtil.getServerUrls(getActivity()) + "mobileqrcode/uploadsignimg.html"; try { File file = new File(img_src); result = UploadUtil.uploadImage(file, uploadurl); } catch (Exception e) { e.printStackTrace(); } } }).start();}
上传文件工具类:
public class UploadUtil { private static final String TAG = "uploadFile"; private static final int TIME_OUT = 10 * 1000;//超时时间 private static final String CHARSET = "utf-8";//设置编码 /** * android上传文件到服务器 * * @param file 需要上传的文件 * @param RequestURL 请求的url * @return 返回响应的内容 */ public static String uploadImage(File file, String RequestURL) { String result = "error"; String BOUNDARY = UUID.randomUUID().toString();//边界标识 随机生成 String PREFIX = "--", LINE_END = "\r\n"; String CONTENT_TYPE = "multipart/form-data";//内容类型 try { URL url = new URL(RequestURL); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setReadTimeout(TIME_OUT); conn.setConnectTimeout(TIME_OUT); conn.setDoInput(true);//允许输入流 conn.setDoOutput(true);//允许输出流 conn.setUseCaches(false);//不允许使用缓存 conn.setRequestMethod("POST");//请求方式 conn.setRequestProperty("Charset", CHARSET);//设置编码 conn.setRequestProperty("connection", "keep-alive"); conn.setRequestProperty("Content-Type", CONTENT_TYPE + ";boundary=" + BOUNDARY); conn.connect(); if (file != null) { //当文件不为空,把文件包装并且上传 DataOutputStream dos = new DataOutputStream(conn.getOutputStream()); /*StringBuilder sb = new StringBuilder(); sb.append(PREFIX); sb.append(BOUNDARY); sb.append(LINE_END); *//* * 这里重点注意: * name里面的值为服务器端需要key,只有这个key才可以得到对应的文件 * filename是文件的名字,包含后缀名的。比如:abc.png *//* sb.append("Content-Disposition: form-data; name=\"inputName\"; filename=\"" + file.getName() + "\"" + LINE_END); //sb.append("Content-Type: application/octet-stream; charset=" + CHARSET + LINE_END); //sb.append("Content-Type: " + getMIMEType(file) + LINE_END); sb.append(LINE_END); dos.write(sb.toString().getBytes());*///此写法会导致无法上传 dos.writeBytes(PREFIX + BOUNDARY + LINE_END); dos.writeBytes("Content-Disposition: form-data; " + "name=\"inputName\";filename=\"" + file.getName() + "\"" + LINE_END); dos.writeBytes(LINE_END); FileInputStream is = new FileInputStream(file); byte[] bytes = new byte[1024]; int len = -1; while ((len = is.read(bytes)) != -1) { dos.write(bytes, 0, len); } is.close(); dos.write(LINE_END.getBytes()); byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINE_END).getBytes(); dos.write(end_data); dos.flush(); /* * 获取响应码 200=成功 * 当响应成功,获取响应的流 */ int res = conn.getResponseCode(); if (res == 200) { InputStream input = conn.getInputStream(); StringBuilder sbs = new StringBuilder(); int ss; while ((ss = input.read()) != -1) { sbs.append((char) ss); } result = sbs.toString(); Log.i(TAG, "result------------------>>" + result); } } } catch (IOException e) { e.printStackTrace(); } return result; } private static String getMIMEType(File file) { String fileName = file.getName(); if (fileName.endsWith("png") || fileName.endsWith("PNG")) { return "image/png"; } else { return "image/jpg"; } }}
Java端接收图片(Eclipse)
@RequestMapping(value = "/uploadsignimg", method = RequestMethod.POST) public void uploadOrderSignImage(HttpServletRequest request, HttpSession session, HttpServletResponse response) { try { MultipartHttpServletRequest rq = (MultipartHttpServletRequest) request; Map file_list = rq.getFileMap(); if (file_list != null && file_list.size() > 0) { if (file_list.containsKey("inputName")) { MultipartFile file = file_list.get("inputName"); if (file != null) { // 保存订单签收图片 String fileName = file.getOriginalFilename(); String newFileName = ""; String[] desp = fileName.split("\\."); if (desp != null && desp.length > 0) { String extendName = desp[desp.length - 1]; newFileName = new Date().getTime() + "." + extendName; ServletContext servletContext = request.getSession().getServletContext(); String uploadPath = servletContext.getRealPath("/") + "upload\\"; File saveFile = new File(uploadPath, newFileName); file.transferTo(saveFile); } session.setAttribute("newfilename", newFileName); } } } } catch (Exception e) { e.printStackTrace(); } }
更多相关文章
- NPM 和webpack 的基础使用
- 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
- 读取android手机流量信息
- android 使用html5作布局文件: webview跟javascript交互
- Android(安卓)matrix 控制图片的旋转、缩放、移动
- Android(安卓)多媒体扫描过程(Android(安卓)Media Scanner Proces
- android“设置”里的版本号
- Android开发环境搭建
- Android(安卓)Resource介绍和使用