java如何实现客户端向服务器端传送一个图片的代码,详细一点,最好能有注释,新手求解

java如何实现客户端向服务器端传送一个图片的代码,详细一点,最好能有注释,新手求解,第1张

public class SocketTest extends Thread {

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 myfile

private 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应该也可以,只是我没有试过,恩,你理解的很对


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/324089.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存