Java上传图片

1.MultipartFile上传

public static String upload(HttpServletRequest request, HttpServletResponse response)
			throws IllegalStateException, IOException {
		// 创建一个通用的多部分解析器
		CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
				request.getSession().getServletContext());
		// 图片名称
		String ret = null;
		// 判断 request 是否有文件上传,即多部分请求
		if (multipartResolver.isMultipart(request)) {
			// 转换成多部分request
			MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
			// 取得request中的所有文件名
			Iterator<String> iter = multiRequest.getFileNames();
			while (iter.hasNext()) {
				// 取得上传文件
				MultipartFile file = multiRequest.getFile(iter.next());
				if (file != null) {
					// 取得当前上传文件的文件名称
					String myFileName = file.getOriginalFilename();
					if (myFileName.trim() != "") {
						// 获得图片的原始名称
						String originalFilename = file.getOriginalFilename();
						// 获得图片后缀名称,如果后缀不为图片格式,则不上传
						String suffix = originalFilename.substring(originalFilename.lastIndexOf(".")).toLowerCase();
						if (!fileTypes.contains(suffix)) {
							return null;
						} else {
							ret = uploadFile(file.getOriginalFilename(), file.getBytes());

						}
					}
				}
			}
		}
		return ret;
	}

	public static String uploadFile(String filename, byte[] data) {
		String res = null;
		CloseableHttpClient httpclient = HttpClients.createDefault();
		HttpPost httppost = new HttpPost("http://cs.ananas.chaoxing.com/upload"); // 文件长传路径
		ByteArrayBody fileBody = new ByteArrayBody(data, filename);
		HttpEntity reqEntity = null;
		try {
			reqEntity = MultipartEntityBuilder.create().setMode(HttpMultipartMode.BROWSER_COMPATIBLE)
					.addPart("file", fileBody).setCharset(CharsetUtils.get("UTF-8")).build();
		} catch (Exception e) {
		}

		httppost.setHeader("Connection", "close");
		httppost.setEntity(reqEntity);
		CloseableHttpResponse response = null;
		try {
			response = httpclient.execute(httppost);
			res = EntityUtils.toString(response.getEntity(), "utf-8");
			EntityUtils.consume(response.getEntity());
			return res;

		} catch (Exception e) {
			return null;
		} finally {
			try {
				HttpEntity e = response.getEntity();
				EntityUtils.consume(e);
				httppost.releaseConnection();
				httpclient.close();
				response.close();
			} catch (Exception e) {
			}
			httppost.releaseConnection();
		}
	}

2.上传Base64File

public String uploadBase64File(String data, HttpServletRequest request) {
		String result = "";
		if (!StringUtils.isBlank(data)) {
			String fileType = this.getBase64FileType(data);
			String fileName = this.getFileName(fileType);
			String newName = this.getFileName(fileType);// 上传之后的文件名

			File file = new File("上传路径" + newName);
			/* 如果不存在就创建 */
			if (!file.getParentFile().exists()) {
				file.getParentFile().mkdirs();
			}
			try {
				this.writeFile(this.base64StrToByte(data), file);
			} catch (Exception e) {
			}
			result = "";
			// attachmentService.save(attachment);
			return result;
		} else {
			result = "上传文件不能为空!";
		}
		return result;
	}

	public String getBase64FileType(String data) {
		String fileType = data.split(",")[0];
		System.out.println(fileType);
		if ("data:image/png;base64".equals(fileType)) {
			return "png";
		}
		if ("data:image/gif;base64".equals(fileType)) {
			return "gif";
		}
		if ("data:image/jpeg;base64".equals(fileType)) {
			return "jpeg";
		}
		return "对不起,请上传正确的文件格式[.png,.gif,.jpg]";
	}

	public String getFileName(String fileType) {
		return UUID.randomUUID().toString().replace("-", "") + "." + fileType;
	}

	@SuppressWarnings("deprecation")
	public String getNewFileName(String fileName) {
		// JDateTime jt = new JDateTime();
		Date date = new Date();
		// Integer siteId = getSiteId();
		return File.separator + "upload" + File.separator + date.getTime() + File.separator + fileName;
	}

	private byte[] base64StrToByte(String data) {
		byte[] b;
		b = decode(data.split(",")[1]);
		for (int i = 0; i < b.length; ++i) {
			if (b[i] < 0) {// 调整异常数据
				b[i] += 256;
			}
		}
		return b;
	}

	private synchronized void writeFile(byte[] bytes, File file) throws Exception {
		BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(file));
		stream.write(bytes);
		stream.close();
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值