Implement file upload using JavaBean (b) upload files



Upload file

As we all know, JavaBean is a Java platform software components, the following functions to achieve is to use the upload JavaBean implementation, so it can be easily applied to any need for file upload function applications.

Listing is as follows:

package com.brainysoftware.web;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.ServletInputStream;
import java.util.Dictionary;
import java.util.Hashtable;
import java.io.PrintWriter;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class FileUploadBean {

private String savePath, filepath, filename, contentType;
private Dictionary fields;

public String getFilename () {
return filename;
}

public String getFilepath () {
return filepath;
}

public void setSavePath (String savePath) {
this.savePath = savePath;
}

public String getContentType () {
return contentType;
}

public String getFieldValue (String fieldName) {
if (fields == null | | fieldName == null)
return null;
return (String) fields.get (fieldName);
}

private void setFilename (String s) {
if (s == null)
return;

int pos = s.indexOf ("filename ="");
if (pos! = -1) {
filepath = s.substring (pos +10, s.length () -1);
/ / Windows browsers send the full file path and name
/ / But Linux / Unix and Mac browsers only send the file name
pos = filepath.lastIndexOf ("\");
if (pos! = -1)
filename = filepath.substring (pos + 1);
else
filename = filepath;
}
}
private void setContentType (String s) {
if (s == null)
return;

int pos = s.indexOf (":");
if (pos! = -1)
contentType = s.substring (pos +2, s.length ());
}

public void doUpload (HttpServletRequest request) throws IOException {
ServletInputStream in = request.getInputStream ();

byte [] line = new byte [128];
int i = in.readLine (line, 0, 128);
if (i <3)
return;
int boundaryLength = i - 2;

String boundary = new String (line, 0, boundaryLength); / / -2 discards the newline character
fields = new Hashtable ();

while (i! = -1) {
String newLine = new String (line, 0, i);
if (newLine.startsWith ("Content-Disposition: form-data; name ="")) {
if (newLine.indexOf ("filename =" ")! = -1) {
setFilename (new String (line, 0, i-2));
if (filename == null)
return;
/ / File content
i = in.readLine (line, 0, 128);
setContentType (new String (line, 0, i-2));
i = in.readLine (line, 0, 128);
/ / Blank line
i = in.readLine (line, 0, 128);
newLine = new String (line, 0, i);
PrintWriter pw = new PrintWriter (new BufferedWriter (new
FileWriter ((savePath == null? "": SavePath) + filename)));
while (i! = -1 & &! newLine.startsWith (boundary)) {
/ / The contents of the last line of file contains a newline character
/ / Therefore, we must check whether the current line is the most
/ / Next line
i = in.readLine (line, 0, 128);
if ((i == boundaryLength +2 | | i == boundaryLength +4)
& & (New String (line, 0, i). StartsWith (boundary)))
pw.print (newLine.substring (0, newLine.length () -2));
else
pw.print (newLine);
newLine = new String (line, 0, i);

}
pw.close ();

}
else {
/ / General form input elements
/ / Get the input element name
int pos = newLine.indexOf ("name ="");
String fieldName = newLine.substring (pos +6, newLine.length () -3);

i = in.readLine (line, 0, 128);
i = in.readLine (line, 0, 128);
newLine = new String (line, 0, i);
StringBuffer fieldValue = new StringBuffer (128);
while (i! = -1 & &! newLine.startsWith (boundary)) {
/ / The last line contains the newline character
/ / Therefore, we must check whether the current row is the last line
i = in.readLine (line, 0, 128);
if ((i == boundaryLength +2 | | i == boundaryLength +4)
& & (New String (line, 0, i). StartsWith (boundary)))
fieldValue.append (newLine.substring (0, newLine.length () -2));
else
fieldValue.append (newLine);
newLine = new String (line, 0, i);
}
fields.put (fieldName, fieldValue.toString ());
}
}
i = in.readLine (line, 0, 128);

}
}
}

The first line of code is the package statement, if you do not want the kind of subordinate to any package, you can delete this line of code.The next few lines of code to be a statement of the JavaBean references the various classes and interfaces.

FileUploadBean class has some 5 Private property (field), six common methods, 2 Private and some methods.