private Socket so
private DataInputStream in
public static void main(String[] args) {
SocketTest app = new SocketTest()
app.startup()
}
public void startup() {
try {
// 创建服务端socket对象并指定监听端口
ServerSocket ss = new ServerSocket(9999)
System.out.println("listening...")
// 等待客户端连接
so = ss.accept()
System.out.println("connected")
// 开始读取数据
start()
} catch (Exception e) {
e.printStackTrace()
}
}
public void run() {
try {
// 创建socket输入流
in = new DataInputStream(so.getInputStream())
while (true) {
try {
// 定义接收缓冲区(64字节)
byte[] buf = new byte[64]
// 将数据读到接收缓冲区中,并返回实际读到的数据长度
int len = in.read(buf, 0, 64)
// 长度为-1说明到达输入流末尾,socket已关闭
if (len <1) {
System.out.println("closed")
break
}
System.out.println("(" + len + ")")
} catch (Exception e) {
// 读数据异常
e.printStackTrace()
}
}
} catch (Exception e) {
// 监听异常
e.printStackTrace()
}
}
}
private File myfileprivate String myfileFileName
private String myfileContentType
@Override
public String execute() throws Exception {
System.out.println("myfile---"+myfile)
System.out.println("myfileFileName---"+myfileFileName)
System.out.println("myfileContentType---"+myfileContentType)
ServletContext sc = ServletActionContext.getServletContext()
String path = sc.getRealPath("/file")
File newFile = new File(path+"/"+myfileFileName)
FileUtils.copyFile(myfile,newFile)
return null
}
给你段代码,是用来在ie上显示图片的(servlet):public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String id = request.getParameter("id")
File file = new File(getServletContext().getRealPath("/")+"out"+"/"+id+".gif")
response.setCharacterEncoding("gb2312")
response.setContentType("doc")
response.setHeader("Content-Disposition", "attachmentfilename=" + new String(file.getName().getBytes("gb2312"),"iso8859-1"))
System.out.println(new String(file.getName().getBytes("gb2312"),"gb2312"))
OutputStream output = null
FileInputStream fis = null
try
{
output = response.getOutputStream()
fis = new FileInputStream(file)
byte[] b = new byte[1024]
int i = 0
while((i = fis.read(b))!=-1)
{
output.write(b, 0, i)
}
output.write(b, 0, b.length)
output.flush()
response.flushBuffer()
}
catch(Exception e)
{
System.out.println("Error!")
e.printStackTrace()
}
finally
{
if(fis != null)
{
fis.close()
fis = null
}
if(output != null)
{
output.close()
output = null
}
}
}
这个程序的功能是根据传入的文件名(id),来为浏览器返回图片流,显示在<img>标签里
标签的格式写成如下:
<img src="http://localhost:8080/app/preview?id=111 "/><br/>
显示的是111.gif这个图片
你上面的问题:
1.我觉得你的第二个办法是对的,我们也是这样做的,需要的是把数据库的记录id号传进servlet,然后读取这条记录中的路径信息,生成流以后返回就是了
关于上传文件的问题,我记得java中应该专门有个负责文件上传的类,你调用就行了,上传后存储在指定的目录里,以实体文件的形式存放
你可以参考这个:
http://blog.csdn.net/arielxp/archive/2004/09/28/119592.aspx
回复:
1.是的,在response中写入流就行了
2.是发到servlet中的,我们一般都是写成servlet,短小精悍,使用起来方便,struts应该也可以,只是我没有试过,恩,你理解的很对
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)