java实现图片或文件的上传功能实现代码

合集下载

Java多方式实现文件上传

Java多方式实现文件上传

在Struts 2中实现文件上传前一阵子有些朋友在电子邮件中问关于Struts 2实现文件上传的问题,所以今天我们就来讨论一下这个问题。

实现原理Struts 2是通过Commons FileUpload文件上传。

Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。

从而我们就能够以本地文件方式的操作浏览器上传的文件。

具体实现前段时间Apache发布了Struts 2.0.6 GA,所以本文的实现是以该版本的Struts 作为框架的。

以下是例子所依赖类包的列表:清单1 依赖类包的列表首先,创建文件上传页面FileUpload.jsp,内容如下:<% @ page language = " java " contentType = " text/html; charset=utf-8 " pageEncodi ng = " utf-8 " %><% @ taglib prefix = " s " uri = " /struts-tags " %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/ TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head><title> Struts 2 File Upload </title></head><body><s:form action="fileUpload"method="POST"enctype="multipart/form-data"> <s:file name="myFile"label="Image File"/><s:textfield name="caption"label="Caption"/><s:submit /></s:form></body></html>清单2 FileUpload.jsp在FileUpload.jsp中,先将表单的提交方式设为POST,然后将enctype设为multipart/form-data,这并没有什么特别之处。

Java实现多文件上传功能

Java实现多文件上传功能

Java实现多⽂件上传功能⽂件上传是开发中⼗分常见的功能,在servlet3.0之前,实现⽂件上传需要使⽤⼀些插件技术,⽐如: commons-fileuploadsmartupload但是在3.0之后servlet内部集成⽂件上传的技术(multipart),有关servlet3.0⽂件上传的实现过程如下:1、表单的提交⽅式必须设置为post2、表单的enctype必须设置为multipart/form-data(使⽤⼆进制流的⽅式提交数据)3、在servlet类中加上@MultipartConfig注解包含四个可设置的参数分别为:fileSizeThreshold 内存缓存的最⼤空间(当上传⽂件的字节数达到该值后使⽤临时⽂件缓存)location 临时⽂件的存储⽬录maxFileSize 允许上传的单个⽂件的最⼤限制maxRequestSize 表单允许提交的总字节数页⾯端<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title></head><body><form action="upload3" method="post" enctype="multipart/form-data"><input type="text" name="fname" placeholder="请输⼊⽂件名" /> <br /><input type="file" name="myfile" multiple/><button>上传</button></form></body></html>服务端package com.softeem.servlet;import java.io.File;import java.io.IOException;import java.util.Collection;import java.util.UUID;import javax.servlet.ServletException;import javax.servlet.annotation.MultipartConfig;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.Part;@WebServlet({ "/UploadServlet", "/upload" })@MultipartConfig(//设置内存缓存的最⼤空间(当上传⽂件的字节数达到该值后使⽤临时⽂件缓存)fileSizeThreshold=1024*1024,//设置临时⽂件的存储⽬录location="d:/temp",//设置允许上传的单个⽂件的最⼤限制maxFileSize=1024*1024*200,//设置表单的最⼤允许提交的字节数maxRequestSize=1024*1024*500)public class UploadServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String basePath = "d:/myfileserver";Collection<Part> parts = request.getParts();for(Part part:parts){if(part.getSize() > 0){String fname = part.getSubmittedFileName();//随机产⽣⼀个uuid作为⽂件名称String uuid = UUID.randomUUID().toString();//获取⽂件后缀String suffix = fname.substring(stIndexOf("."));//组合uuid和⽂件后缀成为新的⽂件名称fname = uuid+suffix;part.write(basePath+File.separator+fname);}}}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stubdoGet(request, response);}}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

java使用CKEditor实现图片上传功能

java使用CKEditor实现图片上传功能

java使⽤CKEditor实现图⽚上传功能java如何使⽤CKEditor实现图⽚上传功能,具体内容如下1.根据实际需要下载指定的CKEditor2.删除⽂件ckeditor/plugins/image/dialogs/image.js预览框中⽂本内容,并修改hidden属性值为显⽰上传选项卡删除image.js中包含在双引号中的上述⽂本将image.js中的hidden属性值改为03.修改ckeditor/config.js⽂件,配置“上传到服务器”按钮调⽤的controller接⼝4.“上传到服务器”按钮调⽤的controller级别的接⼝@Controller@RequestMapping("publicutil")public class PublicUtilController {@RequestMapping(value = "uploadImage")private void uploadImage(HttpServletRequest request, HttpServletResponse response, HttpSession session,@RequestParam MultipartFile[] upload) { response.setCharacterEncoding("UTF-8");PrintWriter out=null;try {out = response.getWriter();} catch (IOException e1) {logger.error("response.getWriter()异常="+e1);e1.printStackTrace();}String callback = request.getParameter("CKEditorFuncNum");// 获得response,requestMap<String, Object> m = new HashMap<String, Object>();if (!ServletFileUpload.isMultipartContent(request)) {m.put("error", 1);m.put("message", "请选择⽂件!");//return m;("请选择⽂件!");}String originalFileName=null;//上传的图⽚⽂件名String fileExtensionName=null;//上传图⽚的⽂件扩展名for (MultipartFile file : upload) {if (file.getSize()> 10*1024* 1024) {out.println("<script type=\"text/javascript\">");out.println("window.parent.CKEDITOR.tools.callFunction(" + callback+ ",''," + "'⽂件⼤⼩不得⼤于10M');");out.println("</script>");}originalFileName=file.getOriginalFilename();("上传的图⽚⽂件名="+originalFileName);fileExtensionName= originalFileName.substring(stIndexOf(".") ,originalFileName.length()).toLowerCase();("图⽚⽂件扩展名="+fileExtensionName);String[] imageExtensionNameArray= WebsiteConstant.IMAGE_EXTENSION_NAME_ARRAY;String allImageExtensionName="";boolean isContain=false;//默认不包含上传图⽚⽂件扩展名for(int i=0;i<imageExtensionNameArray.length;i++){if(fileExtensionName.equals(imageExtensionNameArray[i])){isContain=true;}if(i==0){allImageExtensionName+=imageExtensionNameArray[i];}else{allImageExtensionName+=" , "+imageExtensionNameArray[i];}}String newFileName=java.util.UUID.randomUUID().toString()+fileExtensionName;String uploadPath =WebsiteConstant.PIC_APP_FILE_SYSTEM_CKEDITOR_LOCATION;if(isContain){//包含File pathFile = new File(uploadPath);if (!pathFile.exists()) { // 如果路径不存在,创建pathFile.mkdirs();}try {FileUtils.copyInputStreamToFile(file.getInputStream(), new File(uploadPath ,newFileName));// InputStream is=file.getInputStream();// File toFile = new File(uploadPath, newFileName);// OutputStream os = new FileOutputStream(toFile);// byte[] buffer = new byte[1024];// int length = 0;// while ((length = is.read(buffer)) > 0) {// os.write(buffer, 0, length);// }// is.close();// os.close();} catch (IOException e) {logger.error("FileUtils.copyInputStreamToFile uploadPath="+uploadPath+" newFileName ="+newFileName+" exception="+e);}String imageUrl=WebsiteConstant.PIC_APP_SERVER_URL+"images/ckeditor/"+newFileName;// 返回"图像信息"选项卡并显⽰图⽚ ,在对应的⽂本框中显⽰图⽚资源urlout.println("<script type=\"text/javascript\">");out.println("window.parent.CKEDITOR.tools.callFunction(" + callback+ ",'" +imageUrl + "','')");out.println("</script>");}else{out.println("<script type=\"text/javascript\">");out.println("window.parent.CKEDITOR.tools.callFunction(" + callback+ ",''," + "'⽂件格式不正确(必须为"+allImageExtensionName+"⽂件)');");out.println("</script>");}}}}<span style="font-size:14px;">public class WebsiteConstant {public static String[] IMAGE_EXTENSION_NAME_ARRAY={".jpg",".jpeg",".png",".gif",".bmp"};public static String PIC_APP_SERVER_URL="http://localhost:8090/Picture/";public static String PIC_APP_FILE_SYSTEM_CKEDITOR_LOCATION="/Users/abc/Documents/tomcat/webapps/Picture/images/ckeditor/"; public static final int SUCCESS = 1; // 操作成功</span>5.若是在Maven项⽬中使⽤的CKEditor,需要在pom.xml中添加如下代码:<dependency><groupId>com.ckeditor</groupId><artifactId>ckeditor-java-core</artifactId><version>3.5.3</version></dependency>6.最终效果图以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

基于Java文件输入输出流实现文件上传下载功能

基于Java文件输入输出流实现文件上传下载功能

基于Java⽂件输⼊输出流实现⽂件上传下载功能本⽂为⼤家分享了Java实现⽂件上传下载功能的具体代码,供⼤家参考,具体内容如下前端通过form表单的enctype属性,将数据传递⽅式修改为⼆进制”流“的形式,服务端(servlet)通过 getInputStream() 获取流信息,运⽤java I/O 流的基础操作将流写⼊到⼀个服务端临时创建的⽂件temp中,然后再次利⽤⽂件基本操作,读取并截取临时⽂件内容,根据其中信息创建相应的⽂件,将读取出来的具体信息写⼊,下载时,根据提交的⽂件名称,找到服务器端相应的⽂件,然后根据输出流outStream输出到页⾯,同时将servlet的响应类型和响应头进⾏设置。

具体传输流程如下图:流信息的部分为:具体代码如下:前端代码:<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>Insert title here</title><script src="Js/jquery.js"></script></head><body><form action="FileUpServlet" method="post" enctype="multipart/form-data"><table><tr><td>请选择上传⽂件:</td><td><input id="myfile" name="myfile" type="file" value="" /></td><td><input type="submit" value="上传"></td></tr><tr><td>${info}</td></tr></table></form>⽂件下载:<a href="FileLoadownServlet?filename=${filename}">${filename}</a></body></html>上传servlet部分(核⼼)@WebServlet("/FileUpServlet")public class FileUpServlet extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public FileUpServlet() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stubdoPost(request, response);}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stubrequest.setCharacterEncoding("utf-8");InputStream filesource = request.getInputStream();//request获取流信息String tempname = "D:/temp";//tempfile代表临时存放⽂件File tempfile = new File(tempname);//创建临时⽂件FileOutputStream outputStream = new FileOutputStream(tempfile);//输出流对象,指定输出指tempfile⽬录下byte b[] = new byte[1024];int n;while((n = filesource.read(b))!= -1)//从输出流中每次读取1024字节,直⾄读完{outputStream.write(b,0,n);}outputStream.close();filesource.close();//关闭输⼊输出流/*以下为具体的⽂件操作,主要为解析临时产⽣的 temp⽂件,知识多为java输⼊输出流的内容!*/RandomAccessFile randomfile = new RandomAccessFile(tempfile, "r");//随机流,指定要读临时⽂件,只读randomfile.readLine();//读取第⼀⾏,⽆效数据,不需要String str = randomfile.readLine();//读取第⼆⾏int beginIndex = stIndexOf("=")+2;//指定所需数据的开始位置int endIndex = stIndexOf("\"");//指定所需数据截⾄位置String filename = str.substring(beginIndex,endIndex);//截取⽂件名//重新定位⽂件指针,获取⽂件内容randomfile.seek(0);//⽂件指针从头开始long startext = 0;int i = 1;//⽂件内容开始位置while((n=randomfile.readByte()) != -1&&i <= 4){if(n=='\n'){startext = randomfile.getFilePointer();i++;}}startext = randomfile.getFilePointer() - 1;//获取⽂件内容结束位置randomfile.seek(randomfile.length());long endtext = randomfile.getFilePointer();int j = 1;while(endtext >= 0 && j <= 2){endtext--;randomfile.seek(endtext);if(randomfile.readByte()=='\n'){j++;}}endtext = endtext-1;//将临时⽂件保存⾄指定⽬录中String realpath = getServletContext().getRealPath("/")+"images";//设置⽂件保存⽬录System.out.println(realpath);File fileupload = new File(realpath);if(!fileupload.exists()){fileupload.mkdir();//⽬录不存在则创建}File savefile = new File(realpath,filename);RandomAccessFile randomAccessFile = new RandomAccessFile(savefile, "rw");randomfile.seek(startext);while(startext<endtext){randomAccessFile.write(randomfile.readByte());//⽂件写⼊startext = randomfile.getFilePointer();}//关闭各种输⼊输出流randomAccessFile.close();randomfile.close();tempfile.delete();//删除临时⽂件SimpleDateFormat timed = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date nowdate = new Date();String time = timed.format(nowdate.getTime());request.setAttribute("info", time+" "+filename+"上传成功!");request.setAttribute("filename", filename);request.getRequestDispatcher("/fildeOp.jsp").forward(request, response);}}下载部分protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stubString filename = request.getParameter("filename");String path = getServletContext().getRealPath("/")+"images/";File file = new File(path+filename);//找到⽂件if(file.exists())response.setContentType("application/x-msdownload"); //设置响应类型,此处为下载类型response.setHeader("Content-Disposition", "attachment;filename=\""+filename+"\"");//以附件的形式打开 InputStream inputStream = new FileInputStream(file);ServletOutputStream outputStream = response.getOutputStream();byte b[] = new byte[1024];int n;while((n = inputStream.read(b)) != -1){outputStream.write(b,0,n);}outputStream.close();inputStream.close();}else{request.setAttribute("result", "⽂件不存在!下载失败!");request.getRequestDispatcher("/fildeOp.jsp").forward(request, response);}}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

Java实现一个简单的文件上传案例示例代码

Java实现一个简单的文件上传案例示例代码

Java实现⼀个简单的⽂件上传案例⽰例代码Java实现⼀个简单的⽂件上传案例实现流程:1.客户端从硬盘读取⽂件数据到程序中2.客户端输出流,写出⽂件到服务端3.服务端输出流,读取⽂件数据到服务端中4.输出流,写出⽂件数据到服务器硬盘中下⾯上代码上传单个⽂件服务器端package FileUpload;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import .ServerSocket;import .Socket;public class Server {public static void main(String[] args) throws IOException {System.out.println("服务器端启动");//创建⼀个服务器端对象ServerSocket serverSocket = new ServerSocket(8888);//使⽤accept获取socket对象Socket accept = serverSocket.accept();//使⽤字节输⼊流读取InputStream inputStream = accept.getInputStream();//创建⼀个字节输出流输出到本地FileOutputStream fileOutputStream = new FileOutputStream("F:\\this\\copy1.jpg",true);//创建⼀个数组循环读取byte[] bytes = new byte[1024];int len;while ((len=inputStream.read(bytes))!=-1){fileOutputStream.write(bytes,0,len);}System.out.println("执⾏完毕");fileOutputStream.close();inputStream.close();}}客户端package FileUpload;import java.io.FileInputStream;import java.io.IOException;import java.io.OutputStream;import .Socket;public class Client {public static void main(String[] args) throws IOException {//创建⼀个Socket对象Socket socket = new Socket("127.0.0.1", 8888);//读取本地⽂件FileInputStream fileInputStream = new FileInputStream("F:\\1.jpeg");//获取输出流向服务器写⼊数据OutputStream outputStream = socket.getOutputStream();//创建数组读取byte[] bytes = new byte[1024];int len;//边都边写while((len=fileInputStream.read(bytes))!=-1){outputStream.write(bytes,0,len);outputStream.flush();}//由于不会写⼊-1所以调⽤socket的shutdownOutput⽅法把前⾯的数据都写⼊并且正常终⽌后⾯的序列 socket.shutdownOutput();System.out.println("⽂件发送完毕");fileInputStream.close();outputStream.close();socket.close();}}循环上传客户端代码package FileUpload;import java.io.FileInputStream;import java.io.IOException;import java.io.OutputStream;import .Socket;public class Client {public static void main(String[] args) throws IOException {//创建⼀个Socket对象Socket socket = new Socket("127.0.0.1", 8888);//读取本地⽂件FileInputStream fileInputStream = new FileInputStream("F:\\1.jpeg");//获取输出流向服务器写⼊数据OutputStream outputStream = socket.getOutputStream();//创建数组读取byte[] bytes = new byte[1024];int len;//边都边写while((len=fileInputStream.read(bytes))!=-1){outputStream.write(bytes,0,len);outputStream.flush();}//由于不会写⼊-1所以调⽤socket的shutdownOutput⽅法把前⾯的数据都写⼊并且正常终⽌后⾯的序列 socket.shutdownOutput();System.out.println("⽂件发送完毕");fileInputStream.close();outputStream.close();socket.close();}}服务器端代码package FileUpload;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import .ServerSocket;import .Socket;public class Server {public static void main(String[] args) throws IOException {System.out.println("服务器端启动");//创建⼀个服务器端对象ServerSocket serverSocket = new ServerSocket(8888);//使⽤while()持续写⼊数据while(true){//使⽤accept获取socket对象Socket accept = serverSocket.accept();//Socket对象交给⼦线程处理,进⾏读写操作,new Thread(() ->{{//使⽤字节输⼊流读取InputStream inputStream = null;try {//⽂件名String name = new String("F:\\this\\"+ System.currentTimeMillis()+"copy1.jpg" );inputStream = accept.getInputStream();//创建⼀个字节输出流输出到本地FileOutputStream fileOutputStream = new FileOutputStream(name,true);//创建⼀个数组循环读取byte[] bytes = new byte[1024];int len;while ((len=inputStream.read(bytes))!=-1){fileOutputStream.write(bytes,0,len);}System.out.println("执⾏完毕");fileOutputStream.close();inputStream.close();} catch (IOException e) {e.printStackTrace();}}}).start();}}}循环输⼊⽆⾮就是增加了⼀个while循环与⼀点多线程的知识,以上就是⼀个⽂件上传的⼀个简单案例,到此这篇关于Java实现⼀个简单的⽂件上传案例⽰例代码的⽂章就介绍到这了,更多相关Java实现⽂件上传案例内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。

java实现文件上传和下载

java实现文件上传和下载

java实现⽂件上传和下载本⽂实例为⼤家分享了java实现⽂件上传和下载的具体代码,供⼤家参考,具体内容如下⽂件的上传upload:⽂件上传客户端通过表单的⽂件域file 把客户端的⽂件上传保存到服务器的硬盘上页⾯⾸先对上传的表单有以下要求:必须有⽂件域:input type=file表单提交⽅式:method=post表单的 enctype=multipart/form-data<form method="post" action="/user/regist" enctype="multipart/form-data"><table style="border: chartreuse;solid:2px"><tr><th>⽤户名</th><td><input type="text" name="username"></td></tr><tr><th>密码</th><td><input type="password" name="password"></td></tr><tr><th>⽤户头像</th><td><input type="file" name="photo"> </td></tr><tr><td colspan="2"><input type="submit" value="提交"></td></tr></table></form>Servlet1)⾸先要导⼊以下两个jar包,通过commons-fileupload实现⽂件上传2)创建⼀个⼯⼚对象DiskFileItemFactory,在创建⼀个多部件表单解析器ServletFileUpload,构造⽅法传⼊⼯⼚对象3)解析器解析请求对象,获得⼀个list集合,其中list集合存储的是⼀个⼀个的fileItem对象,⼀个fileItem对应⼀个组件,也就是⼀个<input>4) 遍历集合⽤isFormField()⽅法判断是否为普通组件,然后着重处理⽂件域组件5)获取⽂件名,并⽤getRealPath⽅法获取服务器上传⽂件所在路径,创建新⽂件夹6)获取输⼊流和创建输出流,进⾏⽂件的读写@WebServlet(value = "/user/regist")public class UploadServlet extends HttpServlet {protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//创建⼀个⼯⼚对象DiskFileItemFactory factory = new DiskFileItemFactory();//创建⼀个多部件解析器对象ServletFileUpload fileUpload = new ServletFileUpload(factory);User user = new User();FileOutputStream out=null;try {//⽤解析器对象解析请求,返回⼀个FileItem类型的集合List<FileItem> list = fileUpload.parseRequest(req);for (FileItem fileItem : list) {/*** fileItem.getFieldName());:::获取组件的name值* fileItem.getName());::::获取⽂件域的⽂件名* fileItem.getSize());::::获取数据的字节个数* fileItem.getString());::::获取数据的字符串* fileItem.isFormField());:::判断是否为普通组件*///判断部件是否为普通组件if (fileItem.isFormField()) {//普通组件//获取组件名字也就是name的值String fieldName = fileItem.getFieldName();//获取组件的值也就是value的值String value = fileItem.getString("utf-8");if ("username".equals(fieldName)) { //设置实体类的属性user.setUsername(value);} else if ("password".equals(fieldName)) {user.setPassword(value);}} else {// ⽂件域//获取⽂件名String fielName = fileItem.getName();//输⼊流来读数据InputStream in = fileItem.getInputStream();//设置⽂件写出的路径,并⽤随机码来保证图⽚可以重复String path=req.getServletContext().getRealPath("/imgs/"+ UUID.randomUUID()+fielName);System.out.println("⽂件路径为:"+path);File file = new File(path);out = new FileOutputStream(file);//利⽤commons-io-1.4.jar的IOUtils的copy⽅法直接实现⽂件的复制IOUtils.copy(in,out);user.setPhoto(file.getName());}}} catch (Exception e) {e.printStackTrace();}finally {if(out!=null){out.close();}}req.getSession().setAttribute("user",user);req.getRequestDispatcher("/sucess.jsp").forward(req,resp);}}⽂件的下载页⾯只需⼀个超链接,传需要下载的⽂件名,或者直接输⼊路径在浏览器例: <a href="<c:url value='/file/download?fileName=14.jpg'/>" >狗狗1</a><br/>Servlet1)接收参数,获取⽂件名2)获取imgs的路径,也就是存储⽂件的⽂件夹的路径,然后创建⽂件,传⼊该路径和⽂件名3)创建输⼊流读取⽂件4)设置响应头,⾸先根据⽂件名字获取⽂件的⼤类型,设置响应头Content-Type指定响应的类型;设置响应头Content-Disposition,指定⽂件以附件形式保存到本地磁盘5)⽤响应获取输出流,读出⽂件到客户端@WebServlet("/user/download")public class DownloadServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("UTF-8");//获取要下载的⽂件名String fileName = request.getParameter("fileName");System.out.println(fileName);//获取服务器中存储图⽚的⽂件夹的路径String path1 = request.getServletContext().getRealPath("/imgs");String path=path1+"/"+fileName;File file = new File(path);//创建输⼊流读⽂件FileInputStream in = new FileInputStream(file);//通过⽂件名字获取⽂件的⼤类型String type = request.getServletContext().getMimeType(fileName);//设置响应头ContentType指定响应内容的类型response.setHeader("Content-type",type);//设置响应头Content-Disposition 指定以附件形式保存响应的信息response.setHeader("Content-Disposition","attachment;filename="+(URLEncoder.encode(fileName, "utf-8"))); ServletOutputStream out = response.getOutputStream();//实现⽂件的读写IOUtils.copy(in,out);if(in!=null){in.close();}}}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

fastdfs上传文件的java写法

fastdfs上传文件的java写法

FastDFS是一个开源的分布式文件系统,它是基于C/S架构设计的,能够提供高性能的文件存储和访问服务。

在实际的项目开发中,我们经常会使用FastDFS来存储大量的文件,比如图片、视频等。

本文将介绍如何使用Java语言来实现FastDFS的文件上传功能。

1. 引入依赖要在Java中使用FastDFS,首先需要引入FastDFS的客户端依赖。

通常我们会使用第三方封装好的jar包来操作FastDFS,比如.github.tobato:fastdfs-client"。

可以在Maven或Gradle中添加以下依赖:```xml<dependency><groupId.github.tobato</groupId><artifactId>fastdfs-client</artifactId><version>1.26.3</version></dependency>```2. 初始化FastDFS客户端在使用FastDFS之前,首先需要初始化FastDFS客户端。

我们可以通过配置文件来指定FastDFS的Tracker服务器位置区域,以及一些其他的参数。

以下是一个示例配置文件fastdfs-client.properties:```fastdfs.tracker_servers = 192.168.0.192:22122fastdfs.connect_timeout = 5work_timeout = 30fastdfs.charset = UTF-8```在Java代码中,我们可以通过以下方式来初始化FastDFS客户端:```javaClientGlobal.init("/path/to/fastdfs-client.properties");```3. 实现文件上传功能接下来我们将介绍如何在Java中实现FastDFS的文件上传功能。

JAVA中的文件上传

JAVA中的文件上传

SmartUpload上传图片目标:在Jsp页面中实现文件上传初级篇文件上传是我们程序中会经常使用到的功能,针对于上传的技术也非常多!那么在此介绍两种常用简单的上传方式上传方式一:使用SmartUpload组建进行上传上传方式二:使用Struts的<html:file>标签进行上传我们新建一个Java Web工程,这里使用纯粹的jsp进行上传和显示功能的实现。

我们需要在我们的工程中添加smartUpload.jar包之后我们编写index.jspIndex.jsp ViewIndex.jsp Source需要注意的设置表单的enctype="multipart/form-data"这个值我们可以再Dreamweaver中选我们将表单提交到另一个处理上传请求的doUploadjsp页面我们现在编写处理文件上传的页面doUpload.jsp下面是doUpload.jsp页面中的源代码<%@page language="java"import="java.util.*"pageEncoding="GBK"%><%@page import="com.jspsmart.upload.File"%><%@page import="com.jspsmart.upload.Files"%><%@page import="com.jspsmart.upload.SmartUpload"%><%//实例化上传组件SmartUpload upload=new SmartUpload();//初始化上传组件upload.initialize(this.getServletConfig(),request,response);//开始上传upload.upload();//获取上传的文件列表对象Files f=upload.getFiles();//获取文件对象File fil=f.getFile(0);//去的文件后缀String ext=fil.getFileExt();//判断文件类型是否是jpg格式if(!(ext.equals("jpg"))){out.println("<script type='text/javascript'>alert('文件类型错误');location.replace('index.jsp');</script>");return;}//满足条件进行文件的上传需要注意的是upload使我们webRoot文件夹下的一个目录fil.saveAs("upload/"+fil.getFileName());%>至此我们就完成了一个最简单的图片上传示例。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

java实现图片或文件的上传功能具体思路及代码
一、思路
文件是如何从本地发送到服务器的呢?
首先,我们创建一个新的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.File;
import 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/html;charset=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);
//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(stIndexOf("/")+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);
在这儿我们也可以将其设置成一个条件,当文件大于最大值时向页面提交错误提示。

此外,也可以读取选择文件的后缀来筛选出可以上传的类型。

这些代码大家自己扩展,不再细谈。

通过servlet,将正确的文件传送到服务端的upload文件夹中。

这儿要注意,如果以后将工程从tomcat移除后,这些文件就会被自动删除。

上传结束之后,使页面转到上传成功页面l。

当用户看到此页面时,说明你已实现文件的上传功能。

相关文档
最新文档