server:
app.get('/',function(req, res) {
res.send("<form method='post', action='/file/uploading', enctype='multipart/form-data'><input name='inputFile', type='file', multiple='mutiple'><input name='btnUp', type='submit',value='上传'></form>");
});
app.post('/file/uploading', function(req, res, next){
var form = new multiparty.Form({uploadDir: currPath+'public/'});
form.parse(req, function(err, fields, files) {
var filesTmp = JSON.stringify(files,null,2);
if(err){
console.log('parse error: ' + err);
} else {
console.log('parse files: ' + filesTmp);
var inputFile = files.inputFile[0];
var uploadedPath = inputFile.path;
var dstPath = currPath+'public/' + inputFile.originalFilename;
//重命名为真实文件名
fs.rename(uploadedPath, dstPath, function(err) {
if(err){
console.log('rename error: ' + err);
} else {
console.log('rename ok');
}
});
}
res.writeHead(200, {'content-type': 'text/plain;charset=utf-8'});
res.write('received upload:\n\n');
res.end(util.inspect({fields: fields, files: filesTmp}));
});
});
java:
public class UploadFileTest {
public void start() throws Exception {
String serverUrl = "http://xxxxxxxx:xxx/file/uploading";//上传地址
ArrayList<FormFieldKeyValuePair> ffkvp = new ArrayList<FormFieldKeyValuePair>();
ffkvp.add(new FormFieldKeyValuePair("type", "txt"));
ArrayList<UploadFileItem> ufi = new ArrayList<UploadFileItem>();
ufi.add(new UploadFileItem("inputFile", "D:\\123.txt"));
uploadLog hpe = new uploadLog();
String response = hpe.sendHttpPostRequest(serverUrl, ffkvp, ufi);
System.out.println("Responsefrom server is: " + response);
}
}
class uploadLog {
private static final String BOUNDARY = "----------HV2ymHFg03ehbqgZCaKO6jyH";
public String sendHttpPostRequest(String serverUrl,
ArrayList<FormFieldKeyValuePair> generalFormFields,
ArrayList<UploadFileItem> filesToBeUploaded) throws Exception {
URL url = new URL(serverUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// 发送POST请求必须设置如下两行
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setUseCaches(false);
connection.setRequestMethod("POST");
connection.setRequestProperty("Connection", "Keep-Alive");
connection.setRequestProperty("Charset", "UTF-8");
connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
StringBuffer contentBody = new StringBuffer("--" + BOUNDARY);
String endBoundary = "\r\n--" + BOUNDARY + "--\r\n";
OutputStream out = connection.getOutputStream();
for (FormFieldKeyValuePair ffkvp : generalFormFields) {
contentBody.append("\r\n")
.append("Content-Disposition: form-data; name=\"")
.append(ffkvp.getKey() + "\"")
.append("\r\n")
.append("\r\n")
.append(ffkvp.getValue())
.append("\r\n")
.append("--")
.append(BOUNDARY);
}
String boundaryMessage1 = contentBody.toString();
out.write(boundaryMessage1.getBytes("utf-8"));
for (UploadFileItem ufi : filesToBeUploaded) {
contentBody = new StringBuffer();
contentBody.append("\r\n")
.append("Content-Disposition:form-data; name=\"")
.append(ufi.getFormFieldName() + "\"; ") // form中field的名称
.append("filename=\"")
.append(ufi.getFileName() + "\"") // 上传文件的文件名,包括目录
.append("\r\n")
.append("Content-Type:text/plain")
.append("\r\n\r\n");
String boundaryMessage2 = contentBody.toString();
out.write(boundaryMessage2.getBytes("utf-8"));
File file = new File(ufi.getFileName());
DataInputStream dis = new DataInputStream(new FileInputStream(file));
int bytes = 0;
byte[] bufferOut = new byte[(int) file.length()];
bytes = dis.read(bufferOut);
out.write(bufferOut, 0, bytes);
dis.close();
}
out.write(endBoundary.getBytes("utf-8"));
out.flush();
out.close();
String strLine = "";
String strResponse = "";
InputStream in = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
while ((strLine = reader.readLine()) != null) {
strResponse += strLine + "\n";
}
return strResponse;
}
}
class FormFieldKeyValuePair {
private static final long serialVersionUID = 1L;
//The form field used for receivinguser's input,
// such as "username" in "<input type="text" name="username"/>"
private String key;
//The value entered by user in thecorresponding form field,
// such as "Patrick" the abovementioned formfield "username"
private String value;
public FormFieldKeyValuePair(String key, String value) {
this.key = key;
this.value = value;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
class UploadFileItem implements Serializable{
private static final long serialVersionUID = 1L;
//The form field name in a form used foruploading a file,
// such as "upload1" in "<input type="file" name="upload1"/>"
private String formFieldName;
//File name to be uploaded, thefileName contains path,
// such as "E:\\some_file.jpg"
private String fileName;
public UploadFileItem(String formFieldName, String fileName) {
this.formFieldName = formFieldName;
this.fileName = fileName;
}
public String getFormFieldName() {
return formFieldName;
}
public void setFormFieldName(String formFieldName) {
this.formFieldName = formFieldName;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
}