JavaScript发送图片到服务端

JavaScript发送图片

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<link rel="stylesheet" type="text/css" href="css/base.css" />
		<script src="js/base.js"></script>
		<script src="js/jquery-3.5.0.min.js"></script>
	</head>
	<body>
		<script> 
				var img="";
		        function selectImg(source) { 
		            var file = source.files[0]; 
		            if(window.FileReader) { 
		                var fr = new FileReader(); 
		                fr.onloadend = function(e) { 
							// 通过img属性src设置显示区
		                    document.getElementById("imgview").src = e.target.result; 
							// img 作为传输到服务器的参数
							img = e.target.result;
						}; 
						// 该方法将文件读取为一段以 data: 开头的字符串,
						// 这段字符串的实质就是 Data URL,Data URL是一种将小文件直接嵌入文档的方案
						// 通过fr用于把图片显示出来
		                fr.readAsDataURL(file); 
		            } 
		        } 
				function sendImg(){
					// obj也必须是json对象
					obj = {};
					obj.image = img;
					//确保已经导入了该文件:jquery-3.5.0.min.js-->
					$.ajax({
						url: "http://127.0.0.1:8080/EquipManage/uploadimg",
						data:obj,
						// 传递的是图片文件,这里不能用GET方法
						type: "POST",
						dataType: "json",
						xhrFields: {
						    withCredentials: true
						},
						crossDomain: true,
						success: function(data) {
							alert(JSON.stringify(data));
						},
						error:function(msg){
							// msg为json对象
							document.write(JSON.stringify(msg));
						},
					});
				}
				
		    </script> 
		<!-- accept="image/x-png,image/gif,image/jpeg,image/bmp,image/jpg" -->
		<!-- *表示上传类型为图片 -->
		<div>
			<input type="file" name="file" accept="image/*" onchange="selectImg(this)" /> 
		</div>
		<div>
		<img id="imgview" src="" alt="尚无图片" width="480" height="320"> 
		</div>
		<input type="button" onclick="sendImg()" value="上传到服务器"/>
	</body>
</html>

服务端接收图片

package emp;

import java.io.FileOutputStream;
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import sun.misc.BASE64Decoder;


/**
 * @author wonzeng
 * 处理前端发送过来的图片
 *
 */
@WebServlet("/uploadimg")
public class UploadImageAjax extends HttpServlet {

	private static final long serialVersionUID = 1L;

	@Override

	protected void doPost(HttpServletRequest req, HttpServletResponse response)

			throws ServletException, IOException {

		String image = req.getParameter("image");
		System.out.println("UploadImageAjax.doPost():"+image);

// 		文件头部信息形式
//		String header = "data:image/jpeg;base64,";
		
		String header = "data:image/";
//		找不到以字符串 header,说明不是图片
		if (!image.startsWith(header)) {
			response.getWriter().write("\"failure\"");

		}
		int pos = image.indexOf(";");
		String imgtype = image.substring(header.length(),pos);
		System.out.println("图片类型:"+imgtype);
// 		去掉头部
		image = image.substring(image.indexOf(",")+1);
		System.out.println("去除头部:"+image);
		BASE64Decoder decoder = new BASE64Decoder();
		try {
			// 对字节数组字符串进行Base64解码并生成图片
			byte[] decodedBytes = decoder.decodeBuffer(image);
//			设置图片保存路径
			String imgFilePath = "C:\\Users\\Lenovo\\Desktop\\temp_img."+imgtype;
			FileOutputStream out = new FileOutputStream(imgFilePath);
//			把图片写入文件
			out.write(decodedBytes);
			out.close();

		} catch (Exception e) {
			System.out.println("发生异常");
//			返回json类型
			response.getWriter().write("\"failure\"");
//			e.printStackTrace();
		}
		response.getWriter().write("\"success\"");
	}
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: WebSocket 是一种基于 TCP 协议的网络协议,它支持双向通信,可以在客户端和服务端之间实时地传输数据。在 WebSocket 中,客户端和服务端之间的通信是基于消息的,这意味着它可以传输各种类型的数据,包括文本、二进制数据等。 要在 WebSocket 客户端和服务端之间进行图片交互,可以采用以下步骤: 1. 在服务端上启动 WebSocket 服务器,并监听客户端连接的请求。 2. 在客户端上创建 WebSocket 对象,并连接到服务端的 WebSocket 服务器。 3. 在客户端上选择要传输的图片,并将其转换为 Base64 编码格式。 4. 将 Base64 编码格式的图片数据封装成 WebSocket 消息,并发送服务端。 5. 在服务端上接收到客户端发送的 WebSocket 消息后,解析消息中的图片数据,并将其保存到文件系统中。 6. 在服务端上将保存在文件系统中的图片数据转换为 Base64 编码格式,并封装成 WebSocket 消息,发送给客户端。 7. 在客户端上接收到服务端发送的 WebSocket 消息后,解析消息中的图片数据,并将其显示在客户端上。 需要注意的是,在传输大量的图片数据时,WebSocket 可能会产生较大的带宽消耗,因此建议在传输之前对图片进行压缩处理,以减小数据量。同时,为了保证传输的安全性,可以使用 SSL/TLS 协议来保护 WebSocket 连接。 ### 回答2: WebSocket是一种基于TCP协议的全双工通信协议,可以实现客户端和服务端之间的实时数据传输。在图片交互方面,WebSocket客户端和服务端可以通过以下步骤进行图片交互: 1. WebSocket客户端与服务端建立连接:WebSocket客户端通过HTTP请求与服务端建立WebSocket连接。服务端会返回一个握手响应,在响应头中包含必要的信息验证该连接。 2. 客户端发送请求:客户端在建立好连接后,可以通过WebSocket发送请求给服务端。在图片交互中,可以使用消息的方式向服务端传递图片相关的请求,如请求某个图片资源。 3. 服务端处理请求:服务端接收到客户端的请求后,对其进行解析和处理。根据请求中的参数,服务端可以读取指定的图片资源。 4. 服务端响应请求:服务端会将图片资源以二进制数据的形式返回给客户端。可以将图片数据作为WebSocket消息的一部分,或者通过WebSocket连接发送图片路径等信息,使客户端能够通过该路径获取图片资源。 5. 客户端处理响应:客户端接收到服务端返回的数据后,解析数据并进行处理。可以将二进制数据转换为图片展示在界面上,或者通过提取图片路径等信息,通过网络请求获取图片资源后展示。 6. 数据传输完毕,关闭连接:当图片交互完成后,可以选择手动关闭WebSocket连接,释放资源。 WebSocket客户端和服务端图片交互通过实时双向通信,可以实现快速传输和实时展示图片,提供了更好的用户体验和交互性。 ### 回答3: WebSocket客户端和服务端可以通过传输图片来实现交互。在WebSocket的通信过程中,客户端可以发送图片数据给服务端服务端也可以将图片数据发送给客户端。 首先,客户端可以通过JavaScript的WebSocket API连接到服务端。然后,客户端可以选择一个图片文件并将其转换为二进制数据。接着,客户端可以将二进制数据发送服务端,使用WebSocket的send()方法将数据传输给服务端服务端在接收到图片数据后,可以将其保存到服务器的文件系统中,或者进行其他处理。服务端可以使用任何服务器端的编程语言来处理WebSocket消息,并根据需要进行解码和处理接收到的图片数据。 对于服务端发送图片给客户端的交互,服务端可以将图片数据转换为二进制数据,并使用WebSocket的send()方法将其发送给客户端。客户端收到图片数据后,可以将其转换为图片格式,并在页面上显示出来。 需要注意的是,在传输大量图片数据时,可能需要对数据进行压缩和数据包分割,以避免网络传输过程中的性能问题和数据丢失或损坏。 综上所述,WebSocket客户端和服务端可以通过传输图片数据来实现交互。客户端可以将图片数据发送服务端,而服务端也可以将图片数据发送给客户端。这种交互可以通过WebSocket的API和相关的编程语言和技术来实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值