关于截上传文件流
来源:互联网 发布:php抓取手机号码 编辑:程序博客网 时间:2024/04/30 11:08
package servlet;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class File extends HttpServlet {
private static final long serialVersionUID = 1L;
public File() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out=response.getWriter();
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
char[] hchl={13,10}; //回车换行符
String boundary=request.getContentType().substring(30);
System.out.println("分界:"+boundary);
String field_boundary="--"+boundary+new String(hchl);//开始时的分隔符
String last_boundary="--"+boundary+"--"+new String(hchl);//结束时的分隔符
String _msg="";
ServletInputStream getdata=request.getInputStream();
ByteArrayOutputStream temp=new ByteArrayOutputStream();
byte[] data_line=new byte[1024];
int line_byte_count=0;
boolean found_boundary=false; //是否读完的标记
while((line_byte_count=getdata.readLine(data_line,0,data_line.length))!=-1){
if(!found_boundary){
line_byte_count=getdata.readLine(data_line,0,data_line.length);
}
String temp_str=new String(data_line,0,line_byte_count);
if(temp_str.indexOf("filename")!=-1){ //找一行中filename的位置,没有则返回-1,在这里是找到有filename的那一行
if(temp_str.substring(temp_str.indexOf("filename=")+9,temp_str.lastIndexOf("/"")+1).length()>2){
String file_name = null;
if(temp_str.indexOf("//")!=-1)
file_name=temp_str.substring(temp_str.lastIndexOf("//")+1,temp_str.lastIndexOf("/""));
else{
file_name=temp_str.substring(temp_str.indexOf("filename=")+10, temp_str.lastIndexOf("/""));
}
line_byte_count=getdata.readLine(data_line,0,data_line.length); //这一行大概是Content-Type:
line_byte_count=getdata.readLine(data_line,0,data_line.length); //这一行是空的
FileOutputStream myfile=new FileOutputStream("e://xx//upload//"+file_name,false); //文件存放目录
boolean test=true;
while(test) {
line_byte_count=getdata.readLine(data_line,0,data_line.length);
if(line_byte_count==-1){
test=false;
break;
}
if(temp.size()==0){
temp.write(data_line,0,line_byte_count);
}else{
if(new String(data_line,0,line_byte_count).equals(field_boundary) || new String(data_line,0,line_byte_count).equals(last_boundary)){
myfile.write(temp.toByteArray(),0,temp.toByteArray().length-2);
temp.reset();
myfile.close();
//out.println(file_name+"上传成功了 <br>");
_msg=_msg+file_name+"上传成功<br>";
test=false;
found_boundary=true;
}else{
temp.writeTo(myfile);
temp.reset();
temp.write(data_line,0,line_byte_count);
}
}
}
}else{
String field_name=temp_str.substring(temp_str.indexOf("name")+6,temp_str.lastIndexOf(";")-1);
line_byte_count=getdata.readLine(data_line,0,data_line.length);
line_byte_count=getdata.readLine(data_line,0,data_line.length);
line_byte_count=getdata.readLine(data_line,0,data_line.length);
line_byte_count=getdata.readLine(data_line,0,data_line.length);
found_boundary=true;
// out.println(field_name+"没有选择上传文件! <br>");
// _msg=_msg+field_name+"没有选择上传文件<br>";
}
} else{
String field_name=temp_str.substring(temp_str.indexOf("name")+6,temp_str.lastIndexOf("/""));
line_byte_count=getdata.readLine(data_line,0,data_line.length);
temp.reset();
boolean test=true;
while(test) {
line_byte_count=getdata.readLine(data_line,0,data_line.length);
if(line_byte_count==-1){
test=false;
break;
}
if(new String(data_line,0,line_byte_count).equals(field_boundary) || new String(data_line,0,line_byte_count).equals(last_boundary)){
test=false;
found_boundary=true;
if(temp.size()>2){
// out.println(field_name+":"+new String(temp.toByteArray())+" <br>");
_msg=_msg+field_name+":"+new String(temp.toByteArray())+"<br>";
}else{
// out.println(field_name+"没有内容! <br>");
_msg=_msg+field_name+"没有内容!<br>";
}
temp.reset();
}else{
temp.write(data_line,0,line_byte_count);
}
}
}
}
getdata.close();
out.println("<script>window.parent.Finish('"+_msg+"');</script>");
}
}
- 关于截上传文件流
- 关于文件的上传
- 关于php文件上传
- 关于多文件上传
- 关于文件上传
- 关于文件的上传
- 关于AFNetWoring上传文件
- 关于httpClient上传文件
- 关于文件异步上传
- 关于springMvc文件上传
- 关于JAVAWeb文件上传
- 关于springMvc文件上传
- 关于文件上传
- 关于文件的上传问题!
- 关于多文件上传解决方法
- 关于上传多个文件
- 关于spring的文件上传
- 关于struts2 文件上传出错
- 经典SQL语句大全
- 托盘编程
- Java学习笔记(2)体验云计算
- java ClassLoader
- 一个小问题——关于linux重启网络需重设DNS的问题
- 关于截上传文件流
- Oracle_PO_ER图/Oralce_PR_ER_Model/Standard_PO_Flow
- PROTEL DXP制作PCB的流程
- log4j记录日志到数据库中
- 为什么要紧张呢?
- 12个优秀的开源UML工具
- 矩阵运算和文本处理中的分类问题
- DLL动态链接库 ——SOCKET 3 使用类。
- Truncate,Delete,Drop的比较