老系统对接
This commit is contained in:
453
src/com/sino/publicclass/common/HttpDataParser.java
Normal file
453
src/com/sino/publicclass/common/HttpDataParser.java
Normal file
@ -0,0 +1,453 @@
|
||||
package com.sino.publicclass.common;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.Enumeration;
|
||||
import java.util.Vector;
|
||||
import javax.servlet.ServletInputStream;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
|
||||
public class HttpDataParser {
|
||||
private static final String READLINE_IOEXCEPTION =
|
||||
"Fail to read data sent by the browser.";
|
||||
private static final String CORRUPTED_INPUT_STREAM =
|
||||
"Data stream is corrupted.";
|
||||
private static final String FILE_OUTPUT_STREAM_IOEXCEPTION =
|
||||
"Fail to create the attachment file.";
|
||||
private static final String CLOSE_IOEXCEPTION =
|
||||
"Fail to close the attachment file.";
|
||||
private static final String WRITE_IOEXCEPTION =
|
||||
"Fail to read the attachment file.";
|
||||
private static final String WORKING_DIR_IS_FILE =
|
||||
"The working directory is a file.";
|
||||
private static final String WORKING_DIR_CREATE_ERROR =
|
||||
"Cannot create the file working directory.";
|
||||
private static final String FILE_SIZE_ERROR =
|
||||
"<EFBFBD>ϴ<EFBFBD><EFBFBD>ļ<EFBFBD>̫<EFBFBD><EFBFBD>.";
|
||||
private static final String MULTIDATATYPE = "multipart/form-data";
|
||||
private static final int BUF_SIZE = 0x64000;
|
||||
private static final String NAME_STRING =
|
||||
"Content-Disposition: form-data; name=\"";
|
||||
private static final String FILENAME_STRING = "\"; filename=\"";
|
||||
private static final String CONTENT_TYPE_STRING = "Content-Type:";
|
||||
protected Vector parameterNames;
|
||||
protected Vector parameterValues;
|
||||
protected Vector uploadParameterNames;
|
||||
protected Vector uploadSrcFileNames;
|
||||
protected Vector uploadFileNames;
|
||||
protected Vector uploadFileTypes;
|
||||
protected Vector uploadFileSizes;
|
||||
private int maxFileSize = 1024 * 1024 * 10;
|
||||
public HttpDataParser() {
|
||||
}
|
||||
|
||||
public HttpDataParser(int maxSize) {
|
||||
setMaxFileSize(maxSize);
|
||||
}
|
||||
|
||||
public void parser(HttpServletRequest httpservletrequest, String path, int maxSize)
|
||||
throws Exception {
|
||||
setMaxFileSize(maxSize);
|
||||
parser(httpservletrequest, path);
|
||||
}
|
||||
|
||||
public void parser(HttpServletRequest httpservletrequest, String path)
|
||||
throws Exception {
|
||||
parameterNames = new Vector(0);
|
||||
parameterValues = new Vector(0);
|
||||
uploadParameterNames = new Vector(0);
|
||||
uploadSrcFileNames = new Vector(0);
|
||||
uploadFileNames = new Vector(0);
|
||||
uploadFileTypes = new Vector(0);
|
||||
uploadFileSizes = new Vector(0);
|
||||
byte abyte0[] = new byte[BUF_SIZE];
|
||||
String parameterName = "";
|
||||
String s12 = "";
|
||||
Integer integer = null;
|
||||
int len = 0; //<2F><><EFBFBD><EFBFBD>
|
||||
int cursor = 0; //<2F>α<EFBFBD>
|
||||
String contentType = httpservletrequest.getContentType();
|
||||
if (contentType != null) {
|
||||
contentType = contentType.trim();
|
||||
}
|
||||
//ENCTYPE<50><45><EFBFBD><EFBFBD>multipart/form-data<74><61>
|
||||
if (contentType == null || contentType.indexOf(MULTIDATATYPE) < 0) {
|
||||
String parValue;
|
||||
for (Enumeration enumeration = httpservletrequest.getParameterNames(); enumeration.hasMoreElements();
|
||||
parameterValues.addElement(parValue)) {
|
||||
parameterName = (String) enumeration.nextElement();
|
||||
parameterNames.addElement(parameterName);
|
||||
parValue = getParameter(httpservletrequest, parameterName);
|
||||
}
|
||||
return;
|
||||
}
|
||||
ServletInputStream servletinputstream = httpservletrequest.getInputStream();
|
||||
int contentLength = httpservletrequest.getContentLength();
|
||||
try {
|
||||
len = servletinputstream.readLine(abyte0, 0, BUF_SIZE);
|
||||
}
|
||||
catch (IOException _ex) {
|
||||
throw new Exception(READLINE_IOEXCEPTION);
|
||||
}
|
||||
cursor += len;
|
||||
String s1 = new String(abyte0, 0, len);
|
||||
String code = s1.substring(0, s1.length() - 2);
|
||||
int i2 = 0;
|
||||
while (contentLength > cursor) {
|
||||
int k;
|
||||
try {
|
||||
k = servletinputstream.readLine(abyte0, 0, BUF_SIZE);
|
||||
}
|
||||
catch (IOException _ex) {
|
||||
throw new Exception(READLINE_IOEXCEPTION);
|
||||
}
|
||||
cursor += k;
|
||||
String s2 = null;
|
||||
s2 = new String(abyte0, 0, k);
|
||||
boolean isFile = false; //<2F>Ƿ<EFBFBD><C7B7><EFBFBD>file
|
||||
if (k > NAME_STRING.length()) {
|
||||
if (s2.substring(0, NAME_STRING.length()).equals(NAME_STRING)) {
|
||||
int l1 = s2.indexOf("\"", NAME_STRING.length());
|
||||
parameterName = s2.substring(NAME_STRING.length(), l1);
|
||||
l1 = s2.indexOf(FILENAME_STRING, l1);
|
||||
if (l1 >= 0) {
|
||||
isFile = true;
|
||||
s12 = s2.substring(l1 + FILENAME_STRING.length(), s2.indexOf("\"",
|
||||
l1 + FILENAME_STRING.length())).
|
||||
trim();
|
||||
} else {
|
||||
isFile = false;
|
||||
}
|
||||
} else {
|
||||
throw new Exception(CORRUPTED_INPUT_STREAM);
|
||||
}
|
||||
}
|
||||
try {
|
||||
k = servletinputstream.readLine(abyte0, 0, BUF_SIZE);
|
||||
}
|
||||
catch (IOException _ex) {
|
||||
throw new Exception(READLINE_IOEXCEPTION);
|
||||
}
|
||||
cursor += k;
|
||||
if (isFile) {
|
||||
// is file
|
||||
String s14;
|
||||
String filetype;
|
||||
String s20 = "";
|
||||
if (s12 == null || s12.equals("")) {
|
||||
filetype = "";
|
||||
integer = new Integer(0);
|
||||
s14 = "";
|
||||
boolean flag1 = true;
|
||||
do {
|
||||
try {
|
||||
k = servletinputstream.readLine(abyte0, 0, BUF_SIZE);
|
||||
}
|
||||
catch (IOException _ex) {
|
||||
throw new Exception(READLINE_IOEXCEPTION);
|
||||
}
|
||||
cursor += k;
|
||||
String s3 = new String(abyte0, 0, k);
|
||||
if (s3.length() >= code.length() &&
|
||||
s3.substring(0, code.length()).equals(code)) {
|
||||
flag1 = false;
|
||||
}
|
||||
}
|
||||
while (flag1);
|
||||
} else {
|
||||
String s4 = new String(abyte0, 0, k);
|
||||
//read filetype
|
||||
if (k > CONTENT_TYPE_STRING.length()) {
|
||||
if (s4.substring(0,
|
||||
CONTENT_TYPE_STRING.length()).equals(CONTENT_TYPE_STRING)) {
|
||||
filetype = s4.substring(CONTENT_TYPE_STRING.length(), s4.length()).trim();
|
||||
} else {
|
||||
filetype = "";
|
||||
}
|
||||
} else {
|
||||
filetype = "";
|
||||
}
|
||||
try {
|
||||
k = servletinputstream.readLine(abyte0, 0, BUF_SIZE);
|
||||
}
|
||||
catch (IOException _ex) {
|
||||
throw new Exception(READLINE_IOEXCEPTION);
|
||||
}
|
||||
cursor += k;
|
||||
File file = new File(path);
|
||||
if (file.isFile()) {
|
||||
throw new Exception(WORKING_DIR_IS_FILE);
|
||||
}
|
||||
if (!file.exists() && !file.mkdirs()) {
|
||||
throw new Exception(WORKING_DIR_CREATE_ERROR);
|
||||
}
|
||||
i2++;
|
||||
FileOutputStream fileoutputstream = null;
|
||||
try {
|
||||
String s18;
|
||||
for (s18 = String.valueOf(i2); s18.length() < 3; s18 = '0' + s18) {
|
||||
;
|
||||
}
|
||||
//ת<><D7AA><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
s20 = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()) + s18;
|
||||
int j2 = s12.lastIndexOf(46);
|
||||
if (j2 > 0) {
|
||||
String s19 = s12.substring(j2, s12.length());
|
||||
s20 = s20 + s19;
|
||||
}
|
||||
|
||||
s14 = path + File.separator + s20;
|
||||
fileoutputstream = new FileOutputStream(s14);
|
||||
}
|
||||
catch (IOException _ex) {
|
||||
throw new Exception(FILE_OUTPUT_STREAM_IOEXCEPTION);
|
||||
}
|
||||
int k1 = 0;
|
||||
boolean flag2 = true;
|
||||
boolean flag5 = false;
|
||||
int k2 = 0;
|
||||
int l2 = 0;
|
||||
do {
|
||||
int l;
|
||||
try {
|
||||
l = servletinputstream.readLine(abyte0, 0, BUF_SIZE);
|
||||
}
|
||||
catch (IOException _ex) {
|
||||
throw new Exception(READLINE_IOEXCEPTION);
|
||||
}
|
||||
cursor += l;
|
||||
k1 += l;
|
||||
if (k1 > maxFileSize)throw new Exception(FILE_SIZE_ERROR);
|
||||
String s5 = null;
|
||||
s5 = new String(abyte0, 0, l);
|
||||
if (s5.length() >= code.length() &&
|
||||
s5.substring(0, code.length()).equals(code)) {
|
||||
try {
|
||||
fileoutputstream.close();
|
||||
}
|
||||
catch (IOException _ex) {
|
||||
throw new Exception(CLOSE_IOEXCEPTION);
|
||||
}
|
||||
k1 -= l;
|
||||
k1 -= 2;
|
||||
integer = new Integer(k1);
|
||||
flag2 = false;
|
||||
}
|
||||
if (flag2) {
|
||||
try {
|
||||
if (flag5) {
|
||||
fileoutputstream.write(k2);
|
||||
fileoutputstream.write(l2);
|
||||
}
|
||||
if (l >= 2) {
|
||||
k2 = abyte0[l - 2];
|
||||
l2 = abyte0[l - 1];
|
||||
fileoutputstream.write(abyte0, 0, l - 2);
|
||||
flag5 = true;
|
||||
} else {
|
||||
k2 = 0;
|
||||
l2 = 0;
|
||||
fileoutputstream.write(abyte0, 0, l);
|
||||
flag5 = false;
|
||||
}
|
||||
}
|
||||
catch (IOException _ex) {
|
||||
throw new Exception(WRITE_IOEXCEPTION);
|
||||
}
|
||||
}
|
||||
}
|
||||
while (flag2 && contentLength > cursor);
|
||||
}
|
||||
String srcname = "";
|
||||
int b;
|
||||
b = s12.lastIndexOf(92);
|
||||
if (b < 0) b = s12.lastIndexOf(47);
|
||||
if (b > -1) {
|
||||
srcname = s12.substring(b + 1, s12.length());
|
||||
}
|
||||
uploadParameterNames.addElement(parameterName);
|
||||
uploadSrcFileNames.addElement(srcname);
|
||||
|
||||
uploadFileNames.addElement(s20);
|
||||
uploadFileTypes.addElement(filetype);
|
||||
uploadFileSizes.addElement(integer);
|
||||
} else {
|
||||
// is not file
|
||||
boolean flag3 = true;
|
||||
String tempvalue = "";
|
||||
do {
|
||||
int i1;
|
||||
try {
|
||||
i1 = servletinputstream.readLine(abyte0, 0, BUF_SIZE);
|
||||
}
|
||||
catch (IOException _ex) {
|
||||
throw new Exception(READLINE_IOEXCEPTION);
|
||||
}
|
||||
cursor += i1;
|
||||
String s6 = null;
|
||||
s6 = new String(abyte0, 0, i1);
|
||||
if (s6.length() >= code.length() &&
|
||||
s6.substring(0, code.length()).equals(code)) {
|
||||
flag3 = false;
|
||||
}
|
||||
if (flag3) {
|
||||
tempvalue = tempvalue + s6.substring(0, s6.length());
|
||||
}
|
||||
}
|
||||
while (flag3 && contentLength > cursor);
|
||||
tempvalue = tempvalue.substring(0, tempvalue.length() - 2);
|
||||
parameterNames.addElement(parameterName);
|
||||
parameterValues.addElement(tempvalue);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private String getParameter(HttpServletRequest httpservletrequest, String s)
|
||||
throws
|
||||
Exception {
|
||||
String as[] = null;
|
||||
String s1 = null;
|
||||
as = httpservletrequest.getParameterValues(s);
|
||||
if (as != null) {
|
||||
s1 = as[0];
|
||||
}
|
||||
return s1;
|
||||
}
|
||||
|
||||
public String[] getParameterNames() {
|
||||
int j = parameterNames.size();
|
||||
String as[] = new String[j];
|
||||
for (int i = 0; i < j; i++) {
|
||||
as[i] = (String) parameterNames.elementAt(i);
|
||||
|
||||
}
|
||||
return as;
|
||||
}
|
||||
|
||||
public String getParameterValue(String s) {
|
||||
int i = parameterNames.indexOf(s);
|
||||
String s1;
|
||||
if (i < 0) {
|
||||
s1 = null;
|
||||
} else {
|
||||
s1 = (String) parameterValues.elementAt(i);
|
||||
}
|
||||
if (s1 == null) {
|
||||
return "";
|
||||
} else {
|
||||
return s1;
|
||||
}
|
||||
}
|
||||
|
||||
public String getUploadFileName(String s) {
|
||||
int i = uploadParameterNames.indexOf(s);
|
||||
String s1;
|
||||
if (i < 0) {
|
||||
s1 = null;
|
||||
} else {
|
||||
s1 = (String) uploadFileNames.elementAt(i);
|
||||
}
|
||||
return s1;
|
||||
}
|
||||
|
||||
public String[] getUploadFileName() {
|
||||
|
||||
int j = uploadParameterNames.size();
|
||||
String as[] = new String[j];
|
||||
for (int i = 0; i < j; i++) {
|
||||
as[i] = (String) uploadParameterNames.elementAt(i);
|
||||
}
|
||||
|
||||
return as;
|
||||
|
||||
}
|
||||
|
||||
public Integer getUploadFileSize(String s) {
|
||||
int i = uploadParameterNames.indexOf(s);
|
||||
Integer integer;
|
||||
if (i < 0) {
|
||||
integer = null;
|
||||
} else {
|
||||
integer = (Integer) uploadFileSizes.elementAt(i);
|
||||
}
|
||||
return integer;
|
||||
}
|
||||
|
||||
public String getUploadFileType(String s) {
|
||||
int i = uploadParameterNames.indexOf(s);
|
||||
String s1;
|
||||
if (i < 0) {
|
||||
s1 = null;
|
||||
} else {
|
||||
s1 = (String) uploadFileTypes.elementAt(i);
|
||||
}
|
||||
return s1;
|
||||
}
|
||||
|
||||
public String[] getUploadParameterNames() {
|
||||
int j = uploadParameterNames.size();
|
||||
String as[] = new String[j];
|
||||
for (int i = 0; i < j; i++) {
|
||||
as[i] = (String) uploadParameterNames.elementAt(i);
|
||||
|
||||
}
|
||||
return as;
|
||||
}
|
||||
|
||||
public String getUploadSrcFileName(String s) {
|
||||
int i = uploadParameterNames.indexOf(s);
|
||||
String s1;
|
||||
if (i < 0) {
|
||||
s1 = null;
|
||||
} else {
|
||||
s1 = (String) uploadSrcFileNames.elementAt(i);
|
||||
}
|
||||
if (s1 == null) {
|
||||
return "";
|
||||
} else {
|
||||
return s1;
|
||||
}
|
||||
}
|
||||
|
||||
public void release() {
|
||||
parameterNames.removeAllElements();
|
||||
parameterValues.removeAllElements();
|
||||
uploadParameterNames.removeAllElements();
|
||||
uploadSrcFileNames.removeAllElements();
|
||||
uploadFileNames.removeAllElements();
|
||||
uploadFileTypes.removeAllElements();
|
||||
uploadFileSizes.removeAllElements();
|
||||
}
|
||||
|
||||
/**
|
||||
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD>ΪСд<D0A1><D0B4>ĸ<EFBFBD><C4B8>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>(2002-9-28 16:54:47)
|
||||
* @return java.lang.String
|
||||
* @param filename java.lang.String
|
||||
*/
|
||||
public static String convertSuffix(String filename) {
|
||||
int strNum = 0; //<2F>ַ<EFBFBD>"."<22><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>е<EFBFBD>λ<EFBFBD><CEBB>
|
||||
strNum = filename.indexOf(".");
|
||||
|
||||
if (strNum > -1) {
|
||||
String firstname = ""; //<2F>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
firstname = filename.substring(0, strNum);
|
||||
String secondname = ""; //<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
secondname = filename.substring(strNum + 1);
|
||||
|
||||
secondname = secondname.toLowerCase(); //<2F><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ΪСд<D0A1><D0B4>ĸ
|
||||
filename = firstname + "." + secondname; //<2F><><EFBFBD>ºϳ<C2BA><CFB3>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
}
|
||||
return filename;
|
||||
}
|
||||
|
||||
public int getMaxFileSize() {
|
||||
return maxFileSize;
|
||||
}
|
||||
|
||||
public void setMaxFileSize(int msize) {
|
||||
this.maxFileSize = msize;
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user