gpt4 book ai didi

java - 是否可以上传 file.xlsx,处理它而不将其保存在服务器中?我正在使用 jaxrs

转载 作者:行者123 更新时间:2023-12-01 09:44:50 25 4
gpt4 key购买 nike

我正在使用 jaxrs 上传文件 *.xlsx。是否可以上传这些文件并在内存中处理它们?我只想读取该文件,使用 Apache POI 进行处理并将信息保存在数据库中。 不将它们保存在服务器中

谢谢

最佳答案

抱歉回复晚了,这个答案可能对某人有帮助。

是的,可以读取内存中上传的.xlsx文件的内容[无需将上传的内容保存到物理文件]。但这种方法需要更多内存,因为整个文件内容将存储在缓冲区中。

下面的 servlet 是一个工作示例,只需稍微修改一下,您就可以根据需要将此代码转换为 JSP。

在创建XSSFWorkbook对象时传递上传文件的输入流,如下所示,您将能够按照示例代码读取文件内容。

在 WEB-INF/lib 文件夹中添加 apache-poi jar 和 apache commons-fileupload.jar 以便此代码正常工作。

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.disk.*;
import org.apache.commons.fileupload.servlet.*;
import org.apache.commons.io.FilenameUtils;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.util.List;
import java.util.Iterator;

@WebServlet("/FileUploadServlet")
public class FileUploadServlet extends HttpServlet {


protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
OPCPackage pkg = null;
XSSFWorkbook xlsxbook = null;
InputStream xlsxContentStream = null;

try {


boolean isMultipart = ServletFileUpload.isMultipartContent(request);

if (isMultipart) {

List<FileItem> items = new ServletFileUpload(
new DiskFileItemFactory()).parseRequest(request);
for (FileItem item : items) {
if (!item.isFormField()) {
String fieldName = item.getFieldName();
String fileName = FilenameUtils.getName(item.getName());

xlsxContentStream = item.getInputStream();

pkg = OPCPackage.open(xlsxContentStream);
xlsxbook = new XSSFWorkbook(pkg);
XSSFSheet sheet = xlsxbook.getSheetAt(0);

Iterator<Row> itr = sheet.iterator();

while (itr.hasNext()) {
Row row = itr.next();

// Iterating over each column of Excel file
Iterator<Cell> cellIterator = row.cellIterator();
String text = "";
double num = 0;
while (cellIterator.hasNext()) {

Cell cell = cellIterator.next();

switch (cell.getCellType()) {
case Cell.CELL_TYPE_STRING:
text = cell.getStringCellValue();
break;
case Cell.CELL_TYPE_NUMERIC:
num = cell.getNumericCellValue();
break;
default:

}
}

out.print(text + " " + num);
//call database insert method here and pass the xlsx column values
}

}
}
}
out.flush();

} catch (FileUploadException e) {
throw new ServletException("Cannot parse multipart request.", e);
} catch (Exception e) {
throw new ServletException("", e);
} finally {
if(null!=xlsxContentStream){ xlsxContentStream.close();}
if(null!=pkg){ pkg.close();}

}

}


protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}

}

您的 jsp/html 文件应在表单中包含 enctype="multipart/form-data"

<form action="FileUploadServlet" name="form2" method="post" enctype="multipart/form-data">
Select a .xlsx File to upload :<input type="file" name="file" id="file" size="50" />
<input type="submit" value="Upload xlsx File"/>
</form>

关于java - 是否可以上传 file.xlsx,处理它而不将其保存在服务器中?我正在使用 jaxrs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38151438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com