怎样实现照片上传 图像上传的实质是读取源文件,如photo.jpg,成为内存中的byte[]对象。然后将byte[]对象通过流传送到远端即可。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 //package pub;import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class upload{ private static String newline = "\n"; private String uploadDirectory = "."; private String ContentType = ""; private String CharacterEncoding = ""; private ServletContext application; public upload(){ } public final void init(ServletContext app) throws ServletException { application = app; } private String getFileName(String s) { int i = s.lastIndexOf("\\"); if(i<0||i>=s.length()-1) { i = s.lastIndexOf("/"); if(i<0||i>=s.length()-1) return s; } return s.substring(i+1); } public void setUploadDirectory(String s) { if (isVirtual(s)) { uploadDirectory = application.getRealPath(s); } else { uploadDirectory = s; } File testdir = new File(uploadDirectory); if (!testdir.exists()) { throw new IllegalArgumentException(String.valueOf((new StringBuffer("Directory '")).append(s).append("' not found (1040)."))); } } public void setContentType(String s) { ContentType = s; int j; if((j = ContentType.indexOf("boundary=")) != -1) { ContentType = ContentType.substring(j + 9); ContentType = "--" + ContentType; } } public void setCharacterEncoding(String s) { CharacterEncoding = s; } public String uploadFile(HttpServletRequest req) throws ServletException,IOException { setCharacterEncoding(req.getCharacterEncoding()); setContentType(req.getContentType()); String filename = uploadFile(req.getInputStream()); return filename; }public String uploadFile(ServletInputStream servletinputstream) throws ServletException, IOException { String s5 = null; String filename = null; byte Linebyte[] = new byte[4096]; byte outLinebyte[] = new byte[4096]; int ai[] = new int[1]; int ai1[] = new int[1]; String line; while((line= readLine(Linebyte, ai, servletinputstream, CharacterEncoding)) != null) { int i = line.indexOf("filename="); if(i >= 0) { line = line.substring(i + 10); if((i = line.indexOf("\"")) > 0) line = line.substring(0, i); break; } } filename = line; if(filename != null && !filename.equals("\"")) { filename = getFileName(filename); for (int i=0;i<filename.length();i++) { if((int)filename.charAt(i)==32) { filename=filename.replace(filename.charAt(i),'_'); } } String sContentType=readLine(Linebyte,ai,servletinputstream, CharacterEncoding); if(sContentType.indexOf("Content-Type") >= 0) readLine(Linebyte, ai, servletinputstream, CharacterEncoding); //File(String parent, String child) //Creates a new File instance from a parent pathname string //and a child pathname string. File file = new File(uploadDirectory, filename); //FileOutputStream(File file) //Creates a file output stream to write to the file represented //by the specified File object. FileOutputStream fileoutputstream = new FileOutputStream(file); while((sContentType = readLine(Linebyte, ai, servletinputstream, CharacterEncoding)) != null) { if(sContentType.indexOf(ContentType) == 0 && Linebyte[0] == 45) break; if(s5 != null) { //write(byte[] b, int off, int len) //Writes len bytes from the specified byte array starting //at offset off to this file output stream. fileoutputstream.write(outLinebyte, 0, ai1[0]); fileoutputstream.flush(); } s5=readLine(outLinebyte, ai1, servletinputstream, CharacterEncoding); if(s5== null || s5.indexOf(ContentType) == 0 && outLinebyte[0] == 45) break; fileoutputstream.write(Linebyte, 0, ai[0]); fileoutputstream.flush(); } byte byte0; if(newline.length() == 1) byte0 = 2; else byte0 = 1; if(s5!=null&&outLinebyte[0]!=45&&ai1[0] > newline.length() * byte0) fileoutputstream.write(outLinebyte, 0, ai1[0] - newline.length() * byte0); if(sContentType!=null&&Linebyte[0]!=45&&ai[0]>newline.length() * byte0) fileoutputstream.write(Linebyte, 0, ai[0] - newline.length() * byte0); fileoutputstream.close(); } return filename; } private boolean isVirtual(String s) { if(application.getRealPath(s) != null) { java.io.File file = new java.io.File(application.getRealPath(s)); return file.exists(); } else { return false; } } private String readLine(byte Linebyte[], int ai[], ServletInputStream servletinputstream, String CharacterEncoding) { try { //readLine(byte[] buffer, int offset, int length) //Reads a line from the POST data. ai[0] = servletinputstream.readLine(Linebyte, 0, Linebyte.length); if(ai[0] == -1) return null; } catch(IOException _ex) { return null; } try { if(CharacterEncoding == null) { //用缺省的编码方式把给定的byte数组转换为字符串 //String(byte[] bytes, int offset, int length) return new String(Linebyte, 0, ai[0]); }else{ //用给定的编码方式把给定的byte数组转换为字符串 //String(byte[] bytes, int offset, int length, String enc) return new String(Linebyte, 0, ai[0], CharacterEncoding); } } catch(Exception _ex){ } }}**************** file.html <form enctype="multipart/form-data" method=post action =up.jsp> 请上传您的文件:<br> <input type=file name = myfile><br> <input type=submit value="提 交"> </form> up.jsp <%@ page import = "pub.upload" %> <% String Dir = "/upload/"; upload up = new upload(); up.init(application); up.setUploadDirectory(Dir); String filename = up.uploadFile(request); if (filename != null) { out.print("文件"+filename+"已经成功上传到"+Dir); } %> Byte问题 工厂方法模式和抽象工厂模式有什么区别。。。可有高手? 对单例模式的疑惑 Process如何在超过一定时间后将自身的进程关闭? System.exit(int i)问题?? 一道华为面试题目. JB9哪有注册版的下载呀? 如何写到文件? 请问在Win98中jdk1.4.0怎样设置路径? 如何通过java的scjp考试?望指点! 如何解决JCreator Pro对中文的支持?高分相赠 那里有forte for java的编程书籍下载???
import javax.servlet.*;
import javax.servlet.http.*;public class upload
{
private static String newline = "\n";
private String uploadDirectory = ".";
private String ContentType = "";
private String CharacterEncoding = "";
private ServletContext application; public upload(){ } public final void init(ServletContext app) throws ServletException
{
application = app;
}
private String getFileName(String s)
{
int i = s.lastIndexOf("\\");
if(i<0||i>=s.length()-1)
{
i = s.lastIndexOf("/");
if(i<0||i>=s.length()-1)
return s;
}
return s.substring(i+1);
} public void setUploadDirectory(String s)
{
if (isVirtual(s))
{
uploadDirectory = application.getRealPath(s);
} else
{
uploadDirectory = s;
}
File testdir = new File(uploadDirectory);
if (!testdir.exists()) {
throw new IllegalArgumentException(String.valueOf((new
StringBuffer("Directory '")).append(s).append("' not found (1040).")));
}
}
public void setContentType(String s) {
ContentType = s;
int j;
if((j = ContentType.indexOf("boundary=")) != -1)
{
ContentType = ContentType.substring(j + 9);
ContentType = "--" + ContentType;
}
}
public void setCharacterEncoding(String s)
{
CharacterEncoding = s;
}
public String uploadFile(HttpServletRequest req) throws ServletException,IOException
{
setCharacterEncoding(req.getCharacterEncoding());
setContentType(req.getContentType());
String filename = uploadFile(req.getInputStream());
return filename;
}
public String uploadFile(ServletInputStream servletinputstream) throws ServletException, IOException
{
String s5 = null;
String filename = null;
byte Linebyte[] = new byte[4096];
byte outLinebyte[] = new byte[4096];
int ai[] = new int[1];
int ai1[] = new int[1];
String line;
while((line= readLine(Linebyte, ai, servletinputstream, CharacterEncoding)) != null)
{
int i = line.indexOf("filename=");
if(i >= 0)
{
line = line.substring(i + 10);
if((i = line.indexOf("\"")) > 0)
line = line.substring(0, i);
break;
}
}
filename = line;
if(filename != null && !filename.equals("\""))
{
filename = getFileName(filename);
for (int i=0;i<filename.length();i++)
{
if((int)filename.charAt(i)==32)
{
filename=filename.replace(filename.charAt(i),'_');
}
}
String sContentType=readLine(Linebyte,ai,servletinputstream, CharacterEncoding);
if(sContentType.indexOf("Content-Type") >= 0)
readLine(Linebyte, ai, servletinputstream, CharacterEncoding);
//File(String parent, String child)
//Creates a new File instance from a parent pathname string
//and a child pathname string.
File file = new File(uploadDirectory, filename);
//FileOutputStream(File file)
//Creates a file output stream to write to the file represented
//by the specified File object.
FileOutputStream fileoutputstream = new FileOutputStream(file);
while((sContentType = readLine(Linebyte, ai, servletinputstream, CharacterEncoding)) != null)
{
if(sContentType.indexOf(ContentType) == 0 && Linebyte[0] == 45)
break;
if(s5 != null)
{
//write(byte[] b, int off, int len)
//Writes len bytes from the specified byte array starting
//at offset off to this file output stream.
fileoutputstream.write(outLinebyte, 0, ai1[0]);
fileoutputstream.flush();
}
s5=readLine(outLinebyte, ai1, servletinputstream, CharacterEncoding);
if(s5== null || s5.indexOf(ContentType) == 0 && outLinebyte[0] == 45)
break;
fileoutputstream.write(Linebyte, 0, ai[0]);
fileoutputstream.flush();
}
byte byte0;
if(newline.length() == 1)
byte0 = 2;
else
byte0 = 1;
if(s5!=null&&outLinebyte[0]!=45&&ai1[0] > newline.length() * byte0)
fileoutputstream.write(outLinebyte, 0, ai1[0] - newline.length() * byte0);
if(sContentType!=null&&Linebyte[0]!=45&&ai[0]>newline.length() * byte0)
fileoutputstream.write(Linebyte, 0, ai[0] - newline.length() * byte0);
fileoutputstream.close();
}
return filename;
}
private boolean isVirtual(String s)
{
if(application.getRealPath(s) != null)
{
java.io.File file = new java.io.File(application.getRealPath(s));
return file.exists();
} else {
return false;
}
}
private String readLine(byte Linebyte[], int ai[], ServletInputStream servletinputstream, String CharacterEncoding)
{
try {
//readLine(byte[] buffer, int offset, int length)
//Reads a line from the POST data.
ai[0] = servletinputstream.readLine(Linebyte, 0, Linebyte.length);
if(ai[0] == -1)
return null;
} catch(IOException _ex) {
return null;
}
try {
if(CharacterEncoding == null) {
//用缺省的编码方式把给定的byte数组转换为字符串
//String(byte[] bytes, int offset, int length)
return new String(Linebyte, 0, ai[0]);
}else{
//用给定的编码方式把给定的byte数组转换为字符串
//String(byte[] bytes, int offset, int length, String enc)
return new String(Linebyte, 0, ai[0], CharacterEncoding);
}
} catch(Exception _ex){ }
}
}
****************
file.html
<form enctype="multipart/form-data" method=post action =up.jsp>
请上传您的文件:<br>
<input type=file name = myfile><br>
<input type=submit value="提 交">
</form>
up.jsp
<%@ page import = "pub.upload" %>
<%
String Dir = "/upload/";
upload up = new upload();
up.init(application);
up.setUploadDirectory(Dir);
String filename = up.uploadFile(request);
if (filename != null)
{
out.print("文件"+filename+"已经成功上传到"+Dir);
}
%>