首先,我们创建一个新的web工程,在工程的WebRoot目录下新建一个upload文件夹,这样当我们将该工程部署到服务器上时,服务器便也生成个upload文件夹,用来存放上传的资源。
然后,在WebRoot目录下新建一个jsp文件,主要实现的作用就是选择上传的文件,提交至servlet来进行处理
详细代码如下:一个form将文件信息通过post方式传送到指定的servlet
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%
String path = request.getContextPath()
String basePath =
request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head>
<base <%=basePath%>">
<title>My JSP 'upload.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!--
<link rel="stylesheet" type="text/css" > -->
</head>
<body>
<form action="/upload/UpLoad" method="post" enctype="multipart/form-data">
请选择上传的图片或文件:<input type="file" name="fileName"/><input type="submit" value="上传"/>
</form>
</body>
</html>
可以看到,我们将数据提交到工程下的upload/UpLoad。 之后,我们就来编写这个servlet——UpLoad.java
package load import java.io.Fileimport java.io.IOException import java.io.PrintWriter import java.util.List
import javax.servlet.ServletContext import javax.servlet.ServletException import javax.servlet.http.HttpServlet
import javax.servlet.http.HttpServletRequest import javax.servlet.http.HttpServletResponse import mons.fileupload.FileItem
import mons.fileupload.FileUploadException import mons.fileupload.disk.DiskFileItemFactory import mons.fileupload.servlet.ServletFileUpload public class UpLoad extends HttpServlet { @SuppressWarnings("unchecked") @Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("utf-8")
resp.setContentType("text/htmlcharset=utf-8")
//为解析类提供配置信息
DiskFileItemFactory factory = new DiskFileItemFactory()
//创建解析类的实例
ServletFileUpload sfu = new ServletFileUpload(factory)
//开始解析
sfu.setFileSizeMax(1024*400)
//每个表单域中数据会封装到一个对应的FileItem对象上 try {
List<FileItem> items = sfu.parseRequest(req)
//区分表单域
for (int i = 0 i < items.size() i++) { FileItem item = items.get(i)
var cpro_psid ="u2572954" var cpro_pswidth =966 var cpro_psheight =120
//isFormField为true,表示这不是文件上传表单域 if(!item.isFormField()){
ServletContext sctx = getServletContext()
//获得存放文件的物理路径
//upload下的某个文件夹 得到当前在线的用户 找到对应的文件夹
String path = sctx.getRealPath("/upload") System.out.println(path)
//获得文件名
String fileName = item.getName() System.out.println(fileName)
//该方法在某些平台( *** 作系统),会返回路径+文件名
fileName = fileName.substring(fileName.lastIndexOf("/")+1) File file = new File(path+"\\"+fileName) if(!file.exists()){ item.write(file)
//将上传图片的名字记录到数据库中
resp.sendRedirect("/upload/l") } } }
} catch (Exception e) { e.printStackTrace() }
}
}
因为已对 代码做了详细的注释,所以相信大家也能基本上传的这个过程。要注意的一点是解析实例空间大小的设置。我们希望上传的文件不会是无限大,因此,设置
.setFileSizeMax(1024*400)我这里只介绍如何发送File file=new File(path)//这里的path是你要发送的图片的路径
int b = (int) file.length()//获得图片大小
byte[] bt=new byte[b]//初始化一个图片大小的byte数组
RandomAccessFile raf = new RandomAccessFile(path", "r")//初始化一个读图片的流。path刚上面介绍了
raf.read(bt)//将图片读入byte数组。当然你可以将图片的后缀及其名字也写如byte数组中,这将是你以后便于 *** 作
raf.close()
假如你现在获得了这样一个byte数组,那么发送表情就是发送这里的byte数组,相信socket的发送流你会吧,不会了可以问我!
当然发送了你就得接收,很简单你就是将byte数组接收过来,然后如果你将后缀及其名字写入了byte就先将他们读出来,然后剩下的就是图片的内容,你用同样的流写入某个地方就行了,
RandomAccessFile raf1 = new RandomAccessFile(path1, "rw")//这里的path1是我打算写到的地方,
raf1.write(bt1)//将接收到的bt1即接收到的byte数组写入指定的地方,当然你要是显示在那个聊天窗口,得实现窗口显示图片的内容即可
raf1.close()
java把图片和文字分开发送到后端方法:1、在eclipse中创建一个web工程项目,在lib文件夹中添加文件上传需要用到的组件common-io和uploadfile。
2、编辑好FileUploadServlet,java文件后,在web.xml文件中配置映射路径。
3、点击浏览,选择要上传的图片。选择后会显示图片所在的路径。点击提交。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)