httpclient post 上傳檔案
@RequestMapping(value = "/uploadChatPicture", method = { RequestMethod.GET, RequestMethod.POST }) @ResponseBody public Map<String, Object> upload(HttpServletResponse resp, @RequestParam("file") MultipartFile file) { CloseableHttpClient httpClient = null; CloseableHttpResponse response = null; Map<String, Object> map = new HashMap<>(); File f = null; try { httpClient = HttpClients.createDefault();
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(200000).setSocketTimeout(200000000).build();
//把一個普通引數和檔案上傳給下面這個地址 是一個servlet HttpPost httpPost = new HttpPost(myConfig.getImage_save()); httpPost.setConfig(requestConfig);
InputStream ins = file.getInputStream(); f = new File(file.getOriginalFilename()); inputStreamToFile(ins, f);
MultipartEntityBuilder multipartEntity = createMultipart(f, file.getOriginalFilename());
HttpEntity reqEntity = multipartEntity.build();
httpPost.setEntity(reqEntity);
// 發起請求 並返回請求的響應 response = httpClient.execute(httpPost);
System.out.println("The response value of token:" + response.getFirstHeader("token"));
// 獲取響應物件 HttpEntity resEntity = response.getEntity();
if (resEntity != null) { resEntity.getContent().toString(); String responseEntityStr = EntityUtils.toString(response.getEntity()); JSONObject jsonobj = JSONObject.fromObject(responseEntityStr.substring(2, responseEntityStr.length() - 1));// 將字串轉化成json物件
if ("1".equals(jsonobj.get("code").toString())) { map.put("code", 0); Map<String, Object> data = new HashMap<>(); data.put("src", myConfig.getImage_URL() + jsonobj.getString("filename")); map.put("data", data); } else { map.put("code", 1); } } // 銷燬 EntityUtils.consume(resEntity);
} catch (Exception e) { map.put("code", 0); map.put("msg", "上傳圖片失敗!"); e.printStackTrace(); } finally { } return map; }
//建立httpclient引數(包含file,需要指定型別,不然被呼叫的方法不能識別型別,會指定為無型別檔案)
private MultipartEntityBuilder createMultipart(File f, String originalFilename) { MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
if (originalFilename.endsWith(".bmp")) { multipartEntityBuilder.addBinaryBody("file", f, ContentType.IMAGE_BMP, originalFilename); } else if (originalFilename.endsWith(".gif")) { multipartEntityBuilder.addBinaryBody("file", f, ContentType.IMAGE_GIF, originalFilename); } else if (originalFilename.endsWith(".jpeg")) { multipartEntityBuilder.addBinaryBody("file", f, ContentType.IMAGE_JPEG, originalFilename); } else if (originalFilename.endsWith(".png")) { multipartEntityBuilder.addBinaryBody("file", f, ContentType.IMAGE_PNG, originalFilename); } else if (originalFilename.endsWith(".svg")) { multipartEntityBuilder.addBinaryBody("file", f, ContentType.IMAGE_SVG, originalFilename); } else if (originalFilename.endsWith(".tiff")) { multipartEntityBuilder.addBinaryBody("file", f, ContentType.IMAGE_TIFF, originalFilename); } else if (originalFilename.endsWith(".webp")) { multipartEntityBuilder.addBinaryBody("file", f, ContentType.IMAGE_WEBP, originalFilename); }else if (originalFilename.endsWith(".jpg")) { multipartEntityBuilder.addBinaryBody("file", f, ContentType.IMAGE_JPEG, originalFilename); } return multipartEntityBuilder; }
//將檔案寫入到本地,
public void inputStreamToFile(InputStream ins, File file) { try { OutputStream os = new FileOutputStream(file); int bytesRead = 0; byte[] buffer = new byte[8192]; while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) { os.write(buffer, 0, bytesRead); } os.close(); ins.close(); } catch (Exception e) { e.printStackTrace(); } }