gpt4 book ai didi

java - apache commons-fileupload 是否总是必须写入磁盘?

转载 作者:行者123 更新时间:2023-11-30 04:27:00 24 4
gpt4 key购买 nike

我之前曾使用过 fileUpload 将文件上传到我们的服务器,但现在我必须做一些不同的事情。正在上传的文件永远不会写入磁盘,而是应该逐行读取并插入到数据库中 - 每行代表一个优惠券/折扣 - 这是一个内部内容管理系统,因此文件永远不会被大于 10 行左右,最多 100 行。

我尝试调整我的工作代码以仅使用 BufferedReader 并在读入时处理它,但我不断收到 NullPointerException (尽管堆栈跟踪丢失,所以我必须使用 log4j 才能获得正确的输出)。有没有人在网上看到过例子或者知道我做错了什么?

我的代码片段:

BufferedInputStream in = null;
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> items = upload.parseRequest(request);
String enc = request.getCharacterEncoding();

for (FileItem item : items) {
if (item.isFormField()) {
if ("code".equalsIgnoreCase(fileItem.getFieldName()))
this.code = fileItem.getString(enc);
... // set these to local variables
} else {
in = new BufferedInputStream(new FileInputStream(item.getInputStream()));
String line;
while ((line = br.readLine()) != null) {
insert2DB(line);
}
}
}

我需要做其他事情还是必须先将其写入磁盘然后再读取?

最佳答案

user's guide有一些关于如何执行此操作的文档:

// Create a factory for disk-based file items
FileItemFactory factory = new DiskFileItemFactory();

// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);

// Parse the request
List /* FileItem */ items = upload.parseRequest(request);

Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
InputStream uploadedStream = item.getInputStream();
// your database code goes here
uploadedStream.close();
}

log4j ,您需要一个结构如下的属性文件:

# Root logger option
log4j.rootLogger=DEBUG, file, us
# Direct log messages to a plaintext log
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=public_html/news.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.appender.stderr=org.apache.log4j.ConsoleAppender
log4j.appender.stderr.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1} %L - %m%n
log4j.appender.stderr.layout=org.apache.log4j.PatternLayout

...并记录堆栈跟踪,在您的 catch block 中,放置 loggerInstance.error(exceptionInstance.getMessage(), exceptionInstance); 并且将记录完整的堆栈跟踪,假设错误级别为也已记录。

关于java - apache commons-fileupload 是否总是必须写入磁盘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15627542/

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