java - 如何上传CSV文件,然后自动将数据插入数据库?

我有一个基于java的spring mvc应用程序,它也使用spring安全性。我使用hibernate作为这个web应用的orm工具。
以下是我的要求--
用户将能够使用Web浏览器上载CSV文件。已知csv文件的格式有以下5个字段:

userId, location, itemId, quantity, tranDate
001, NY, 00A8D5, 2, 12/31/2012
002, MN, 00A7C1, 10, 12/22/2012
.
.

like this there are about 100 rows.

I am using Super CSV in the project:

private void readWithCsvBeanReader(String CSV_FILENAME) throws Exception {

    String CSV_FILENAME = "\\\\Serv01\\Files\\QueryResult.csv";
    //String CSV_FILENAME = "C:\\Files\\QueryResult.csv";
    ICsvBeanReader beanReader = null;
    try {
        beanReader = new CsvBeanReader(new FileReader(CSV_FILENAME),
                CsvPreference.STANDARD_PREFERENCE);

        // the header elements are used to map the values to the bean (names
        // must match)
        final String[] header = beanReader.getHeader(true);
        // get Cell Processor
        final CellProcessor[] processors = getProcessors();

在这里,我读取csv文件的内容,然后使用hibernate插入它。
当我在本地或windows共享上提供csv路径时,这很好。
String CSV_FILENAME = "\\\\Serv01\\Files\\QueryResult.csv";
or via this:
String CSV_FILENAME = "C:\\Files\\QueryResult.csv"; 

如何实现这一要求,使csv文件路径位置将由使用spring mvc的网页上的按钮提供?
是否也可以从远程位置自动获取文件,以便我将文件上载到ftp位置,然后程序可以连接到远程ftp位置并按计划处理文件?
注:我是新来的文件操作,如果有人可以指向一些文章,那么它将是伟大的。


最佳答案:

像这样大约有100行。
不用费心将csv保存为tmp文件,因为spring的Mulitpart将为您做到这一点
直接插入行(请求可能需要更长的时间来处理,但是考虑到你表面上的当前知识,你可以担心以后会优化它)

private void readWithCsvBeanReader(MultipartFile uploadedFile) throws Exception {

    ICsvBeanReader beanReader = null;
    try {
        beanReader = new CsvBeanReader(new InputStreamReader(uploadedFile.getInputStream()),
                CsvPreference.STANDARD_PREFERENCE);

        // the header elements are used to map the values to the bean (names
        // must match)
        final String[] header = beanReader.getHeader(true);
        // get Cell Processor
        final CellProcessor[] processors = getProcessors();

使控制器类似于:
@RequestMapping(value = "/add", method=RequestMethod.POST)
public String upload(@RequestParam("file") MultipartFile file) throws IOException {
// call your csv parsing code.
}

确保您的表单看起来像:
<h1>Add a File for testing</h1>
<form method="post" action="/add" class="well form-vertical" enctype="multipart/form-data">
    <input type="file" name="file" />
    <button type="submit" class="btn">{{actionLabel}}</button>
</form>

注意enctype
对于输入和输出,您应该理解Java's IO Decorator pattern
我建议你尽量保持简单,这样你就可以学习基本知识了。然后担心添加更健壮的解决方案/库。

译文:来源   文章分类: java spring web-applications file-upload supercsv

相关文章:

java - 文字“ <?”有什么特殊含义吗? >”?

java - 好看的Java Swing外观和感觉?

java - 如何在apache tomcat中配置域名[关闭]

java - 还有其他事情可以在92khz至192khz中进行音频处理吗?

java - StringBuilder .equals Java

java - 扩展JFrame

java - 枚举是否比公共静态最终常量更难维护?

java - JAXB属性的多个映射

java - Spring boot ddl自动生成器

java - 可迭代的Deque NullPointerException