- 浏览: 918011 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
天天来注册:
...
try catch finally 用法 -
tadpole_java:
谢谢你的分享。
二十七、Qt数据库(七)QSqlRelationalTableModel(转) -
359449749tan:
android之EditText文本监听(addTextChangedListener) -
michael_wang:
人过留名 多谢分享
Android NOtification 使用 -
wilsonchen:
wangqi0614 写道这个删除是删除所有的把?能不能值删除 ...
Android的SharedPreferences保存与删除数据简单实例
1.RunningUpLoader上传Bean
首先是RunningUpLoader.java,代码有些多,因为我是自己来解析输入流的。
package testupload;
import java.io.*;
import javax.servlet.http.HttpServletRequest;
public class RunningUpLoader {
public RunningUpLoader() {
}
/**
* 上传文件
* @param request HttpServletRequest Servlet的请求对象
* @param name String 要上传的文件在表单中的参数名
* @param fileName String 保存在服务器上的文件名
* @throws IOException
*/
public void doUpload(HttpServletRequest request, String name,String fileName) throws
IOException {
InputStream in = request.getInputStream();
byte[] buffer = getFileContent(name,in);
FileOutputStream fos = new FileOutputStream(fileName);
fos.write(buffer,0,buffer.length-1);
fos.close();
}
/**
* 获取上传的文件buffer,结尾处将多一个换行符
* @param name String 文件上传参数的名字
* @param is InputStream 服务器对话的输入流
* @return byte[] 返回获取的文件的buffer,结尾处多一个换行符
* @throws IOException
*/
private byte[] getFileContent(String name, InputStream is) throws IOException{
int index;
boolean isEnd = false;
byte[] lineSeparatorByte;
byte[] lineData;
String content_disposition;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
BufferedInputStream bis = new BufferedInputStream(is);
lineSeparatorByte = readStreamLine(bis);
while(!isEnd) {
lineData = readStreamLine(bis);
if(lineData == null) {
break;
}
content_disposition = new String(lineData,"ASCII");
index = content_disposition.indexOf("name=\"" + name + "\"");
if (index >= 0 && index < content_disposition.length()) {
System.out.println(readStreamLineAsString(bis)); // skip a line
System.out.println(readStreamLineAsString(bis)); // skip a line
while ((lineData = readStreamLine(bis)) != null) {
System.out.println(new String(lineData));
if (isByteArraystartWith(lineData, lineSeparatorByte)) { // end
isEnd = true;
break;
} else {
bos.write(lineData);
}
}
}else {
lineData = readStreamLine(bis);
if(lineData == null)
return null;
System.out.println(new String(lineData,"ASCII"));
while(!isByteArraystartWith(lineData, lineSeparatorByte)) {
lineData = readStreamLine(bis);
if(lineData == null)
return null;
System.out.println(new String(lineData,"ASCII"));
}
}
}
return bos.toByteArray();
}
private byte[] readStreamLine(BufferedInputStream in) throws IOException{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int b = in.read();
if(b== -1)
return null;
while(b != -1 && b != '\n') {
bos.write(b);
b = in.read();
}
return bos.toByteArray();
}
private String readStreamLineAsString(BufferedInputStream in) throws IOException {
return new String(readStreamLine(in),"ASCII");
}
private boolean isByteArraystartWith(byte[] arr,byte[] pat) {
int i;
if(arr == null || pat == null)
return false;
if(arr.length < pat.length)
return false;
for(i=0;i<pat.length;i++) {
if(arr[i] != pat[i])
return false;
}
return true;
}
}
上传文件文件的时候,需要在之前的html中增加一个form表单,里面需要有个<input type="file" name="fileUpload" >的输入按钮。这样,浏览器才会将要上传的文件递交给服务器。 其中name="fileUpload"的名字,就是RunnningUpLoader.doUpload函数中的name参数。
使用的时候直接用bean就OK了。比如upload.jsp如下:
<jsp:useBean id="upBean" scope="page" class="testupload.RunningUpLoader" />
<%
upBean.doUpload(request,"fileupload","runningUpLoad.txt");
%>
2. RunningDownLoader下载Bean
package testupload;
import java.io.*;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
public class RunningDownLoader {
public RunningDownLoader() {
}
public void doDownload(HttpServletResponse response, String filePath,String fileName) throws
IOException {
response.reset();//可以加也可以不加
response.setContentType("application/x-download");//设置为下载application/x-download
System.out.println(this.getClass().getClassLoader().getResource("/").getPath());
String filenamedownload = filePath;
String filenamedisplay = fileName;//系统解决方案.txt
filenamedisplay = URLEncoder.encode(filenamedisplay,"UTF-8");--解决下载中文文件名文件的问题
response.addHeader("Content-Disposition","attachment;filename=" + filenamedisplay);
OutputStream output = null;
FileInputStream fis = null;
try
{
output = response.getOutputStream();
fis = new FileInputStream(filenamedownload);
byte[] b = new byte[1024];
int i = 0;
while((i = fis.read(b)) > 0)
{
output.write(b, 0, i);
}
output.flush();
}
catch(Exception e)
{
System.out.println("Error!");
e.printStackTrace();
}
finally
{
if(fis != null)
{
fis.close();
fis = null;
}
if(output != null)
{
output.close();
output = null;
}
}
}
}
下载文件,最好是做到Servlet上。直接在Servlet的doGet下面增加如下代码即可
//Process the HTTP Get request
public void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
RunningDownLoader downloader= new RunningDownLoader();
downloader.doDownload(response,"E:\\MyProjects\\testupload.rar","upload.bin");
}
自己的一点心得:
我要实现一个文件下载的功能,在找到这篇文章之前,我看了jspsmart的有关文章,几行代码就可以解决下在问题,
但对下载的实现原理:确不怎么清楚,虽然以前也用servlet自己写过下载的功能 ,由于时间太长已经记不太清楚了,
现在看了整个思路都清晰了,
我们不是为了解决问题而解决问题,问题解决了你如果没有学到新的知识或经验,也许下次遇到问题的时候还是只知道到网上去baidu,却永远都打不开自己的思路,当遇到网络上没有的难题时,就手足无措了,所以永远都成不了高手,
学习原理才能举一反三.
首先是RunningUpLoader.java,代码有些多,因为我是自己来解析输入流的。
package testupload;
import java.io.*;
import javax.servlet.http.HttpServletRequest;
public class RunningUpLoader {
public RunningUpLoader() {
}
/**
* 上传文件
* @param request HttpServletRequest Servlet的请求对象
* @param name String 要上传的文件在表单中的参数名
* @param fileName String 保存在服务器上的文件名
* @throws IOException
*/
public void doUpload(HttpServletRequest request, String name,String fileName) throws
IOException {
InputStream in = request.getInputStream();
byte[] buffer = getFileContent(name,in);
FileOutputStream fos = new FileOutputStream(fileName);
fos.write(buffer,0,buffer.length-1);
fos.close();
}
/**
* 获取上传的文件buffer,结尾处将多一个换行符
* @param name String 文件上传参数的名字
* @param is InputStream 服务器对话的输入流
* @return byte[] 返回获取的文件的buffer,结尾处多一个换行符
* @throws IOException
*/
private byte[] getFileContent(String name, InputStream is) throws IOException{
int index;
boolean isEnd = false;
byte[] lineSeparatorByte;
byte[] lineData;
String content_disposition;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
BufferedInputStream bis = new BufferedInputStream(is);
lineSeparatorByte = readStreamLine(bis);
while(!isEnd) {
lineData = readStreamLine(bis);
if(lineData == null) {
break;
}
content_disposition = new String(lineData,"ASCII");
index = content_disposition.indexOf("name=\"" + name + "\"");
if (index >= 0 && index < content_disposition.length()) {
System.out.println(readStreamLineAsString(bis)); // skip a line
System.out.println(readStreamLineAsString(bis)); // skip a line
while ((lineData = readStreamLine(bis)) != null) {
System.out.println(new String(lineData));
if (isByteArraystartWith(lineData, lineSeparatorByte)) { // end
isEnd = true;
break;
} else {
bos.write(lineData);
}
}
}else {
lineData = readStreamLine(bis);
if(lineData == null)
return null;
System.out.println(new String(lineData,"ASCII"));
while(!isByteArraystartWith(lineData, lineSeparatorByte)) {
lineData = readStreamLine(bis);
if(lineData == null)
return null;
System.out.println(new String(lineData,"ASCII"));
}
}
}
return bos.toByteArray();
}
private byte[] readStreamLine(BufferedInputStream in) throws IOException{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int b = in.read();
if(b== -1)
return null;
while(b != -1 && b != '\n') {
bos.write(b);
b = in.read();
}
return bos.toByteArray();
}
private String readStreamLineAsString(BufferedInputStream in) throws IOException {
return new String(readStreamLine(in),"ASCII");
}
private boolean isByteArraystartWith(byte[] arr,byte[] pat) {
int i;
if(arr == null || pat == null)
return false;
if(arr.length < pat.length)
return false;
for(i=0;i<pat.length;i++) {
if(arr[i] != pat[i])
return false;
}
return true;
}
}
上传文件文件的时候,需要在之前的html中增加一个form表单,里面需要有个<input type="file" name="fileUpload" >的输入按钮。这样,浏览器才会将要上传的文件递交给服务器。 其中name="fileUpload"的名字,就是RunnningUpLoader.doUpload函数中的name参数。
使用的时候直接用bean就OK了。比如upload.jsp如下:
<jsp:useBean id="upBean" scope="page" class="testupload.RunningUpLoader" />
<%
upBean.doUpload(request,"fileupload","runningUpLoad.txt");
%>
2. RunningDownLoader下载Bean
package testupload;
import java.io.*;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
public class RunningDownLoader {
public RunningDownLoader() {
}
public void doDownload(HttpServletResponse response, String filePath,String fileName) throws
IOException {
response.reset();//可以加也可以不加
response.setContentType("application/x-download");//设置为下载application/x-download
System.out.println(this.getClass().getClassLoader().getResource("/").getPath());
String filenamedownload = filePath;
String filenamedisplay = fileName;//系统解决方案.txt
filenamedisplay = URLEncoder.encode(filenamedisplay,"UTF-8");--解决下载中文文件名文件的问题
response.addHeader("Content-Disposition","attachment;filename=" + filenamedisplay);
OutputStream output = null;
FileInputStream fis = null;
try
{
output = response.getOutputStream();
fis = new FileInputStream(filenamedownload);
byte[] b = new byte[1024];
int i = 0;
while((i = fis.read(b)) > 0)
{
output.write(b, 0, i);
}
output.flush();
}
catch(Exception e)
{
System.out.println("Error!");
e.printStackTrace();
}
finally
{
if(fis != null)
{
fis.close();
fis = null;
}
if(output != null)
{
output.close();
output = null;
}
}
}
}
下载文件,最好是做到Servlet上。直接在Servlet的doGet下面增加如下代码即可
//Process the HTTP Get request
public void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
RunningDownLoader downloader= new RunningDownLoader();
downloader.doDownload(response,"E:\\MyProjects\\testupload.rar","upload.bin");
}
自己的一点心得:
我要实现一个文件下载的功能,在找到这篇文章之前,我看了jspsmart的有关文章,几行代码就可以解决下在问题,
但对下载的实现原理:确不怎么清楚,虽然以前也用servlet自己写过下载的功能 ,由于时间太长已经记不太清楚了,
现在看了整个思路都清晰了,
我们不是为了解决问题而解决问题,问题解决了你如果没有学到新的知识或经验,也许下次遇到问题的时候还是只知道到网上去baidu,却永远都打不开自己的思路,当遇到网络上没有的难题时,就手足无措了,所以永远都成不了高手,
学习原理才能举一反三.
发表评论
-
判断两二叉树相等
2014-05-29 00:13 1148bool IsBSTEqual(BNode* root1, ... -
数据去重
2014-05-29 00:11 866引用 使用数据结构丰富的脚本语言,如Python,利用其中的字 ... -
判断一个整数是否为2的次方幂
2014-05-28 23:56 915/* 判断一个整数是否为2的次方幂 */ bool ... -
实现Comparable接口,进行排序
2014-05-28 23:47 8831import java.util.ArrayList; ... -
Struct2详解
2014-05-21 15:14 939引用 Servlet的缺点: 1、web.xml配置比较多 2 ... -
常用方法
2014-04-25 20:24 795[color=red]String[/color] ... -
java nio和io的比较
2014-04-16 19:49 1766引用 第一部分:简单介绍NIO 服务器在合理时间内处理 ... -
Struts2、Spring3、HIbernate4总结
2014-04-16 10:35 876引用 第一部分:Struts2 1 ... -
Finally的使用总结
2014-04-15 22:02 911//清单一: public class ... -
Fibonacci数列的递归与非递归
2014-04-15 20:57 750//非递归实现 //f(1)=1,f(2)=1,f(n) ... -
Java中的异常
2014-04-14 09:42 660引用 Throwable包括两个子类:Error和Except ... -
JVM的垃圾回收机制
2014-04-13 18:39 879引用 堆被划分为新生代和旧生代, 新生代包含Eden 和 S ... -
集合类总结
2014-04-04 15:54 704引用 一. 总的框架 总的有Collection和Map Co ... -
设计模式之策略模式
2014-04-01 17:07 665main ======================= ... -
设计模式之责任链模式
2014-04-01 16:32 765main ======================= ... -
设计模式之访问者模式
2014-03-31 18:57 878main ======================= ... -
设计模式之工厂模式
2014-03-31 11:33 655main ======================= ... -
设计模式之观察者模式
2014-03-30 15:04 880main =============== ... -
Java虚拟机JVM详解
2014-03-29 12:13 1352引用 第一部分:JVM基本结构 1.什么是JVM 一个java ... -
Java中的反射机制Reflect
2014-03-28 17:17 3627package com.reflect.sym; i ...
相关推荐
本压缩包提供的“jsp+servlet 上传和下载包”是一个基本的文件操作组件,它包含了一些核心库,如Apache Commons IO和Commons FileUpload,以及可能的中文支持库jsmartcom_zh_CN.jar。以下是这些组件的详细说明: 1....
在这个"Servlet 文件上传下载例子"中,我们将探讨如何使用Servlet实现文件的上传和下载功能,这对于构建一个简单的图片文件服务器至关重要。 1. **文件上传** - **MultipartRequest**: 在Servlet中,处理文件上传...
总结来说,"servlet上传下载文件"是一个使用Java Servlet实现的Web应用程序,允许用户上传文件至服务器,并能够从服务器下载这些文件。这个系统的核心在于Servlet的`doPost`或`doGet`方法,它们处理HTTP请求,读取或...
JavaServlet文件上传和下载,java初学者笔记!
文件上传下载是 Web 应用中的一种常见需求,使用 jsp 页面和 servlet 实现文件上传下载是其中的一种解决方案。下面将详细介绍 jsp、servlet 文件上传下载技术。 文件上传下载原理 文件上传下载的原理是将客户端的...
在Java Web开发中,...对于文件上传下载,还需要理解HTTP协议中的相关概念,如Content-Type、Content-Disposition等。分页功能则涉及到数据的组织和展示策略。最后,对Java基础和Web开发的整体理解也是必不可少的。
在本主题中,“servlet上传下载”指的是使用Servlet来实现文件的上传和下载功能,这是web开发中的常见需求。 首先,我们来探讨Servlet如何处理文件上传。在web应用中,用户通常需要上传图片、文档等文件,这时...
以上就是使用JSP和Servlet实现文件上传下载的基本流程和关键代码。在实际应用中,我们还需要考虑错误处理、安全性(如防止文件覆盖、上传恶意文件等)以及性能优化(如使用缓冲、断点续传等)。在大型项目中,可能还...
总的来说,"安卓+servlet上传下载图片"涉及到Android客户端的文件选择、网络请求,以及Servlet服务端的文件存储和下载处理。通过理解这些知识点,开发者可以构建一个完整的文件传输系统。在实际项目中,还需要考虑...
下面将详细介绍如何使用Servlet实现文件上传和下载的功能。 ### 文件上传 文件上传通常涉及到HTTP协议中的`multipart/form-data`编码类型,这是处理表单数据中包含文件的关键。Servlet 3.0及以上版本提供了更方便...
这个"Flex4.6+java+servlet上传图片例子+图片上传预览"的项目,结合了前端的Flex技术和后端的Java Servlet,为我们提供了一个完整的解决方案。下面将详细解释这个项目的各个组成部分及其工作原理。 首先,让我们来...
本文将深入探讨如何在Servlet中实现文件的上传和下载功能,以及在页面上利用JSP和Javabean来实例化对象。 首先,文件上传是通过HTTP多部分请求(Multipart Request)来实现的。Servlet 3.0及以上版本提供了对这种...
在这个"Servlet上传代码和架包"中,我们可以看到一个关于如何在Servlet中实现文件上传的实例,这对于初学者来说是一个非常实用的学习资源。 文件上传是Web应用程序中的常见功能,允许用户将本地文件传输到服务器。...
【AjaxSubmit+Servlet实现表单文件上传与下载详解】 在Web开发中,文件上传和下载是常见的功能,尤其是在用户交互...通过实际操作和学习`upload-download-servlet`项目,开发者可以深入理解文件上传下载的完整流程。
在Java Web开发中,Servlet和Struts框架常常用于处理HTTP请求,实现动态网页功能,包括文件的上传和下载。...通过理解并实践这些概念,开发者可以有效地构建和维护一个支持中文文件名的上传下载系统。
NULL 博文链接:https://technicalsearch.iteye.com/blog/1270691
本文将详细介绍如何使用Java Servlet技术实现文件的上传和下载功能。我们将通过一个简单的示例来展示整个过程,包括前端表单设计、后端处理逻辑以及错误处理等内容。 #### 二、准备工作 为了实现文件上传和下载,...
总结来说,实现Servlet文件上传下载需要理解Servlet生命周期、HTTP请求处理、多部分数据解析以及文件I/O操作。Apache Commons FileUpload库简化了这一过程,但理解其背后的原理对于解决可能出现的问题和优化性能至关...
### Servlet上传知识点详解 #### 一、概述 在Web开发中,经常需要处理用户上传的文件,例如图片、文档等。对于Java Web开发者而言,利用Servlet进行文件上传是一种常见的技术手段。本文将根据提供的示例代码,深入...
总结来说,"安卓+servlet实现上传下载图片"涉及的关键知识点包括: 1. Android客户端:使用HttpURLConnection或OkHttp发起HTTP请求,读取图片文件,发送POST请求上传图片,接收GET响应下载图片。 2. Servlet服务端...