2

たくさん検索した後、dartを介してアップロードしているときに単純なテキストファイルを逆シリアル化できません。

これは多くの反対票を引き起こす可能性があることを私は知っていますが、dartにファイルをアップロードする方法の簡単なデモが役立つでしょうか?

コンソールとdartのWebアプリの両方で。基本的な単語が含まれているテキストファイルをアップロードしたいだけです。

4

1 に答える 1

6

次の簡単な例が私に役立ちます。

エディターで次のファイル構造を使用します。

fileuploadtest/
  fileupload.dart
  index.html

index.html(注:ここにはダートはありません!)

<!DOCTYPE html>

<html>
  <head>
    <title>index</title>
  </head>

  <body>   
    <form enctype="multipart/form-data" action="foo" method="POST">
      <input type="hidden" name="MAX_FILE_SIZE" value="100000" />
        Choose a file to upload: <input name="uploadedfile" type="file" /><br />
      <input type="submit" value="Upload File" />
    </form>   
  </body>
</html>

fileupload.dart

これにより、(簡単にするために)常にすべてのリクエストに応答する静的ファイルハンドラーとindex.htmlGETすべてのPOSTリクエストに応答し、アップロードされたファイルのコンテンツ(実際にはPOSTデータ全体)を出力するファイルアップロードハンドラーが作成されます。関連するビットを抽出する必要があります)。

import 'dart:io';

void main() {
  var httpServer = new HttpServer();

  // attach handlers:

  var static = new StaticFileHandler();
  httpServer.addRequestHandler(static.matcher, static.handler);

  var fileUploadHandler = new FileUploadHandler();
  httpServer.addRequestHandler(fileUploadHandler.matcher, 
      fileUploadHandler.handler);

  // start listening
  httpServer.listen("127.0.0.1", 8081);
}

class FileUploadHandler {
  bool matcher(req) => req.method == "POST"; // return true if method is POST

  void handler(req,res) {
    req.inputStream.onData = () {
      var data = req.inputStream.read();
      var content = new String.fromCharCodes(data);
      print(content); // print the file content.
    };
  }
}

class StaticFileHandler {
  //  return true for all GET requests.
  bool matcher(req) {
    print("Path: ${req.path}");
    return req.method=="GET"; 
  }

  void handler(req,res) {
    var file = new File("index.html"); // only serve index.html in the same folder
    file.openInputStream().pipe(res.outputStream);
  }
}

起動fileUpload.dartし、ブラウザを使用してに移動しますhttp://localhost:8081/index.html

foo.txt次のコンテンツを含む、というファイルの場合:

foo
bar

これは私が取得するログ出力全体です(Dart Editorのコンソールから投稿されました)

------WebKitFormBoundaryw7XBqLKuA7nP1sKc

Content-Disposition: form-data; name="MAX_FILE_SIZE"

100000

------WebKitFormBoundaryw7XBqLKuA7nP1sKc

Content-Disposition: form-data; name="uploadedfile"; filename="foo.txt"

Content-Type: text/plain

foo
bar

------WebKitFormBoundaryw7XBqLKuA7nP1sKc--
于 2013-01-29T16:49:24.043 に答える