使用Apache的upload组件问题

cataclyam2000 cataclyam2000 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
使用Apache的upload组件问题上传文件到服务器,由于文件是分块上传的,需要将多次上交的FileItem写入到一个文件中.由于上传文件很大,不能写入多个小文件后再一齐组装.服务器端的代码:
List /* FileItem */items = upload.parseRequest(request);
// Process the uploaded items
Iterator iter = items.iterator();
FileItem fileItem;
File fout;
out.println("[parseRequest.jsp] Let's read input files ...");
while (iter.hasNext()) {
fileItem = (FileItem) iter.next();

if (fileItem.isFormField()) {
out.println("[parseRequest.jsp] (form field) "
+ fileItem.getFieldName() + " = "
+ fileItem.getString());
// System.out.println("[parseRequest.jsp] (form field) "
// + fileItem.getFieldName() + " = "
// + fileItem.getString());

// If we receive the md5sum parameter, we've read
// finished to read the current file. It's not
// a very good (end of file) signal. Will be better in
// the future ... probably !
// Let's put a separator, to make output easier to read.
if (fileItem.getFieldName().equals("md5sum[]")) {
out
.println("[parseRequest.jsp] ------------------------------ ");
}
} else {
// Ok, we've got a file. Let's process it.
// Again, for all informations of what is exactly a
// FileItem, please
// have a look to
// http://jakarta.apache.org/commons/fileupload/
//
out.println("[parseRequest.jsp] FieldName: "
+ fileItem.getFieldName());
out.println("[parseRequest.jsp] File Name: "
+ fileItem.getName());
out.println("[parseRequest.jsp] ContentType: "
+ fileItem.getContentType());
out.println("[parseRequest.jsp] Size (Bytes): "
+ fileItem.getSize());
// If we are in chunk mode, we add ".partN" at the end
// of the file, where N is the chunk number.
String uploadedFilename = fileItem.getName()
+ (numChunk > 0 ? ".part" + numChunk : "");
fout = new File(ourTempDirectory
+ (new File(uploadedFilename)).getName());
out.println("[parseRequest.jsp] File Out: "
+ fout.toString());
// write the file
System.out.println("uploadedFilename:"+uploadedFilename);

fileItem.write(fout);


// FileInputStream fis = new FileInputStream(ourTempDirectory
// + fileItem.getName());
//
// FileOutputStream fos = new FileOutputStream(
// ourTempDirectory + fileItem.getName());
//
// byte[] byteBuff = new byte[1024];
// int nbBytes = 0;
// while ((nbBytes = fis.read(byteBuff)) >= 0) {
// // out.println("[parseRequest.jsp] " + " Nb
// // bytes read: " + nbBytes);
// fos.write(byteBuff, 0, nbBytes);
// }
// fis.close();
// fout.delete();
// receive(request, response);

// ////////////////////////////////////////////////////////////////////////////////////
// Chunk management: if it was the last chunk, let's
// recover the complete file
// by concatenating all chunk parts.
//
/*
if (bLastChunk) {
System.out.println("bLastChunk:"+bLastChunk);
out
.println("[parseRequest.jsp] Last chunk received: let's rebuild the complete file ("
+ fileItem.getName() + ")");
// First: construct the final filename.
FileInputStream fis;
FileOutputStream fos = new FileOutputStream(
ourTempDirectory + fileItem.getName());
int nbBytes;
byte[] byteBuff = new byte[1024];
String filename;
for (int i = 1; i <= numChunk; i += 1) {
filename = fileItem.getName() + ".part" + i;
out.println("[parseRequest.jsp] "
+ " Concatenating " + filename);
fis = new FileInputStream(ourTempDirectory
+ filename);
while ((nbBytes = fis.read(byteBuff)) >= 0) {
// out.println("[parseRequest.jsp] " + " Nb
// bytes read: " + nbBytes);
fos.write(byteBuff, 0, nbBytes);
}
fis.close();
}
fos.close();
}*/

// End of chunk management
// ////////////////////////////////////////////////////////////////////////////////////

fileItem.delete();
}
}// while
...全文
评论 9
收藏 已收藏
分享
返回顶部
cataclyam2000
Java SE 62,620 成员 307,251 内容