Java文件上传下载
来源:互联网 发布:网络空间安全好就业吗 编辑:程序博客网 时间:2024/06/03 22:56
文件上传
1.form提交
<form action="upload" enctype="multipart/form-data" method="post"> 请选择文件:<input type="file" name="file"> <input type="submit" value="上传"> </form>
2.UploadServlet
/**步骤: 1.request读取数据流并存储为临时文件 2.解析临时文件内容 由于读取的数据流不仅仅包含文件信息。 以上传内容为 hello 的 .txt 文件为例 临时文件的内容为: -----------------------------2185749228913 Content-Disposition: form-data; name="file"; filename="test.txt" Content-Type: text/plain hello -----------------------------2185749228913-- 3.创建上传的文件*/ @WebServlet("/upload")public class UploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; public UploadServlet() { } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /*-------客户端数据转换成临时文件--------------*/ //文件输入流 InputStream in = request.getInputStream(); //创建一个临时文件存储输入流数据 String tmpFileName = "E:/tempFile"; File tempFile = new File(tmpFileName); //输出流 FileOutputStream fileOutputStream = new FileOutputStream(tempFile); //指定一次读入的长度 byte tmp[] = new byte[1024]; int n; //将数据输入到临时文件中 //n为实际读入的长度 while((n = in.read(tmp)) != -1){ //写入从tmp[0]到tmp[n] fileOutputStream.write(tmp,0,n); } /*-------临时文件生成上传的文件--------------*/ RandomAccessFile randomAccessFile = new RandomAccessFile(tempFile, "r"); randomAccessFile.readLine(); String fileName = randomAccessFile.readLine(); //获取文件名 fileName = fileName.substring(fileName.lastIndexOf("=")+2,fileName.lastIndexOf("\"")); System.out.println(fileName); //将文件指针重新定位到文件头 randomAccessFile.seek(0); //起始位置 long startPosition = 0; //获取文件内容 开头位置 int i = 1; while((n = randomAccessFile.read()) != -1 && i<=4) { if(n == '\n'){ startPosition = randomAccessFile.getFilePointer(); i++; } } //由于read()一次之后指针已经指向了下一个下标,所以减 1 startPosition-=1; //将文件指针重新定位到文件尾 randomAccessFile.seek(randomAccessFile.length()); //结束位置 long endPosition = randomAccessFile.getFilePointer(); int j=1; //获取文件内容 结束位置 while(endPosition >= 0 && j<=2){ endPosition--; randomAccessFile.seek(endPosition); if(randomAccessFile.readByte() == '\n'){ j++; } } endPosition--; //服务器上保存文件的位置 String realPath = this.getServletContext().getRealPath("/") + "upload"; File fileupload = new File(realPath); //新建一个文件夹 if(!fileupload.exists()){ fileupload.mkdir(); } //建立文件 File savedFile = new File(realPath,fileName); RandomAccessFile savedRandomAccessFile = new RandomAccessFile(savedFile, "rw"); randomAccessFile.seek(startPosition); //从临时文件中写入内容 while(startPosition<endPosition){ savedRandomAccessFile.write(randomAccessFile.readByte()); startPosition++; } //关闭流并删除临时文件 savedRandomAccessFile.close(); randomAccessFile.close(); fileOutputStream.close(); in.close(); tempFile.delete(); }}
文件下载
1.DownloadServlet
@WebServlet("/download")public class DownloadServlet extends HttpServlet{ @Override protected void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException{ String filePahtOnServer = getServletContext().getRealPath("/upload/test.txt"); File fileOnServer = new File(filePahtOnServer); FileInputStream readFileStream =null; OutputStream outputStream = null; if(fileOnServer.exists()){ //设置相应的类型 response.setContentType("application/x-msdownload"); response.setHeader("Content-Disposition", "attachment;filename=test.txt"); readFileStream = new FileInputStream(fileOnServer); outputStream = response.getOutputStream(); byte b[] = new byte[1024]; int n; while((n = readFileStream.read(b)) != -1){ outputStream.write(b); } outputStream.close(); readFileStream.close(); request.setAttribute("result", "文件下载成功"); }else{ request.setAttribute("result", "文件下载失败"); } request.getRequestDispatcher("download.jsp").forward(request, response); }
0 0
- java文件上传下载
- java文件上传下载
- Java文件上传下载 源码
- java文件上传下载
- Java文件上传下载 源码
- 文件上传下载代码 java
- java文件上传下载
- java-web文件上传下载
- java上传下载文件
- java文件上传下载
- JAVA 文件上传下载
- Java 文件的上传下载
- java实现文件上传下载
- java文件上传下载
- java ftp 文件上传下载
- java socket 文件上传下载
- java文件上传下载
- java FTP上传下载文件
- Codeforces 567C Geometric Progression (离散 + DP)
- Standard Compilation & OSR
- HDU 2072 单词数 -- C++ string set 统计不同的单词数目
- chrome浏览器去除广告
- 数组中未出现的最小正整数(算法)
- Java文件上传下载
- [最大流]UVa11082
- JBOSS学习-一些基本配置了解
- 40 Combination Sum II
- ontouch
- 改变AlertDialog默认背景
- js闭包
- 虚拟机完全克隆CentOS后配置网络
- linux free详解