java 中如何向服务器上传图片

Python014

java 中如何向服务器上传图片,第1张

我们使用一些已有的组件帮助我们实现这种上传功能。

常用的上传组件:

Apache 的 Commons FileUpload

JavaZoom的UploadBean

jspSmartUpload

以下,以FileUpload为例讲解

1、在jsp端

<form id="form1" name="form1" method="post" action="servlet/fileServlet" enctype="multipart/form-data">

要注意enctype="multipart/form-data"

然后只需要放置一个file控件,并执行submit操作即可

<input name="file" type="file" size="20" >

<input type="submit" name="submit" value="提交" >

2、web端

核心代码如下:

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

request.setCharacterEncoding("UTF-8")

DiskFileItemFactory factory = new DiskFileItemFactory()

ServletFileUpload upload = new ServletFileUpload(factory)

try {

List items = upload.parseRequest(request)

Iterator itr = items.iterator()

while (itr.hasNext()) {

FileItem item = (FileItem) itr.next()

if (item.isFormField()) {

System.out.println("表单参数名:" + item.getFieldName() + ",表单参数值:" + item.getString("UTF-8"))

} else {

if (item.getName() != null &&!item.getName().equals("")) {

System.out.println("上传文件的大小:" + item.getSize())

System.out.println("上传文件的类型:" + item.getContentType())

System.out.println("上传文件的名称:" + item.getName())

File tempFile = new File(item.getName())

File file = new File(sc.getRealPath("/") + savePath, tempFile.getName())

item.write(file)

request.setAttribute("upload.message", "上传文件成功!")

}else{

request.setAttribute("upload.message", "没有选择上传文件!")

}

}

}

}catch(FileUploadException e){

e.printStackTrace()

} catch (Exception e) {

e.printStackTrace()

request.setAttribute("upload.message", "上传文件失败!")

}

request.getRequestDispatcher("/uploadResult.jsp").forward(request, response)

}

实现思路:无论是何种类型,都是转换为流的形式进行的文件传输和存储。

可以通过BufferedReader 流的形式进行流缓存,之后通过readLine方法获取到缓存的内容。

BufferedReader bre = null

OutputStreamWriter pw = null//定义一个流

try {

String file = "D:/test/test.GIF"

bre = new BufferedReader(new FileReader(file))//此时获取到的bre就是整个文件的缓存流

pw = new OutputStreamWriter(new FileOutputStream(“D:/New.GIF”),"GBK")//确认流的输出文件和编码格式,此过程创建了“test.GIF”实例

while ((str = bre.readLine())!= null) // 判断最后一行不存在,为空结束循环

{

pw.write(str)//将要写入文件的内容,可以多次write

};

bre.close();

pw.close()//关闭流

备注:文件流用完之后必须及时通过close方法关闭,否则会一直处于打开状态,直至程序停止,增加系统负担。