2016-11-16 17 views
0

にダーツクライアントからファイルをアップロードは、私はこの問題でこだわっているノードサーバ

これは標準<form><input type="file" name="toUpload/>

で動作taht Node.jsのコードです
router.post('/sp/file', function (req, res) { 
    // File to be uploaded 
    console.log("###" + req.files); 
    var fileToUpload = req.files.toUpload; 
    //console.log(fileToUpload); 
    var dir = __dirname + "/files"; 
/* var dir = __dirname + "/files/" + Date.now(); 
    if (!fs.existsSync(dir)) { 
    fs.mkdirSync(dir); 
    }*/ 

    fileToUpload.mv(__dirname + "/files/" + fileToUpload.name, function (err) { 
    if (err) { 
     console.log("error: " + err); 
    } else 
     console.log("upload succeeded"); 
    console.log(fileToUpload); 
    console.log(__dirname + "/files/" + fileToUpload.name); 
    uploadFilesStorj.uploadFile(__dirname + "/files/" + fileToUpload.name); 
    }); 

}); 

私はダーツを通じてファイルをアップロードしようとすると、送信されたデータは同じフォーマットではありませんので、今、私は立ち往生:

class AppComponent { 
void uploadFiles(dynamic files) { 
    if (files.length == 1) { 
     final file = files[0]; 
     final reader = new FileReader(); 
     //reader.onProgress.listen() 
     reader.onLoad.listen((e) { 
      sendData(reader.result); 
     }); 
     reader.readAsDataUrl(file); 
    } 
} 

sendData(dynamic data) async { 
    final req = new HttpRequest(); 
    req.onReadyStateChange.listen((Event e) { 
     if (req.readyState == HttpRequest.DONE && 
       (req.status == 200 || req.status == 0)) {} 
    }); 
    req.onProgress.listen((ProgressEvent prog) { 
     if (prog.lengthComputable) 
      print("advancement : " + (prog.total/prog.loaded).toString()); 
     else 
      print("unable to compute advancement"); 
    }); 
    req.open("POST", "/sp/file"); 
    req.send(data); 
} 

}

ここに私のダーツの角度フロントコードが

<input type="file" #upload (change)="uploadFiles(upload.files)" 
        (dragenter)="upload.style.setProperty('border', '3px solid green')" 
        (drop)="upload.style.setProperty('border', '2px dotted gray')" class="uploadDropZone" name="toUpload"/> 

だこの方法で送信されるデータの形式である: 要求ペイロード:

データ:text/htmlで、base64で、PGh0bWw + DQogICA8aGVhZD4NCiAgICAgIDx0aXRsZT5GaWxlIFVwbG9hZGluZyBGb3JtPC9

私は成功することなくそれに多くの時間を過ごしました。誰でも助けてください。

+0

と組み合わせて使用​​され.js: var rawBodySaver = function(req、res、buf、encoding){ if(buf && buf.length){ \t req.rawBody = buf.toString(encoding || 'utf8'); } }; と私のupload.js var out = fs.createWriteStream(__ dirname + "/ files/test"); out.write(req.rawBody); out.end(); 私はbas64でエンコードされた生データに 'data:text/html; base64'という情報がプレフィックスされているということです。 –

答えて

0

ファイルの内容は、Dartバリアントの要求本文に直接書き込んでいます。しかし、HTMLフォームは、マルチパート形式のエンコーディングでリクエストを送信し、そこでファイルを埋め込みます。それはあなたのサーバーが期待するものでもあります。

+0

ええ、私はそれが私がフォームとしてデータを送信できないことを理解しています (変化する)=「uploadFiles(アップロード)」 バックエンド:フロントエンド:私は、全体の入力をアップロードし、それを変更しようとした 空隙uploadFiles(動的アップロード){ \t \t最終REQを=新規のHttpRequest()。 \t \t req.open( "POST"、 "/ sp/file"); \t \t req.send(アップロード); –

+0

それでは、どういう可能性があるのですか?私はダーツとノードに慣れています。 (プロジェクトはこれらの技術を課している)。マルチパートフォーム全体をダーツで送信したいのですが、 (私はまだjsイベントに反応したいので、私はd&dビヘイビアを持っている必要があるので、標準形式) –

+0

あなたがすでに知っていれば、**この問題を解決するために**あなたは何をしていますか?Dartのドキュメントでmultipartフォーム要求がどのように機能するかを調べました。 "multipart form dart"の簡単なgoogle検索は、数十のソリューションを提供します。 – Matthias247

1

私は最終的にマルチパートフォームとしてそれを投稿する方法を発見した:

void uploadFiles() { 
    var formData = new FormData(querySelector("#fileForm")); 
    HttpRequest.request("/sp/file", method: "POST", sendData: formData).then((req) { 
     print("OK"); 
    }); 
} 

は私がNode.jsの アプリで直接データをロードしようと

<form id="fileForm"> 
    <input type="file" #upload (change)="uploadFiles(upload.files)" 
      (dragenter)="upload.style.setProperty('border', '3px solid green')" 
      (drop)="upload.style.setProperty('border', '2px dotted gray')" class="uploadDropZone" name="toUpload"/> 
</form> 
+0

解決策はこちらhttp://stackoverflow.com/questions/26279968/how-can-i-do-a-multipart-post-in-dart-angulardart/40637606#40637606 –

関連する問題