4

Spring セキュリティも使用する Java ベースの Spring MVC アプリケーションがあります。この Web アプリの ORM ツールとして hibernate を使用しています。

以下は私の要件です -

ユーザーは、Web ブラウザーを使用して CSV ファイルをアップロードできます。CSV ファイルの形式には、次の 5 つのフィールドがあることが知られています。

userId、場所、itemId、数量、tranDate
001、ニューヨーク、00A8D5、2、12/31/2012
002、ミネソタ、00A7C1、10、12/22/2012
.
.

このように約100行あります。

プロジェクトで Super CSV を使用しています。

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"; 
  1. Spring MVC を使用して Web ページのボタンによって CSV ファイルのパスの場所が提供されるようにするには、どうすればこの要件を達成できますか?

  2. リモートの場所からファイルを自動的に取得して、ファイルを FTP の場所にアップロードし、プログラムがリモートの ftp の場所に接続してスケジュールに従ってファイルを処理できるようにすることもできますか?

PS: 私はファイル操作が初めてで、誰かが記事を指し示すことができれば、それは素晴らしいことです.

4

3 に答える 3

6

このように約100行あります。

Spring のMulitpartが自動的に行を挿入するので、CSV を tmp ファイルとして保存する必要はありません (リクエストの処理に時間がかかる場合がありますが、表面上の現在の知識があれば、後で最適化することを心配できます) 。

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.
}

FORM が次のようになっていることを確認してください。

<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 の IO Decorator パターンを理解する必要があります。

基本を学ぶことができるように、できるだけシンプルに保つことをお勧めします。次に、より堅牢なソリューション/ライブラリを追加することを心配してください。

于 2013-01-01T16:53:23.903 に答える
0

ここで説明されているように、FileUploadController を作成する必要があります。次に、サーブレットでファイルをストリームとして取得したら、すべての検証を行い、ファイルを一時的/永続的な場所に保存して、後で DB インポート手順で使用する必要があります。

于 2013-01-01T07:48:11.693 に答える
0

リモート FTP ファイルの場所を使用するには、Spring Integration を調べます。これに関するドキュメントはこちらです。

于 2013-01-01T16:07:30.517 に答える