2017-07-10 14 views
1

にアクセスしてください。タイトルが明確であるかどうかわかりませんが、メテオアプリではファイルをアップロードするツールを持っていますその後MongoDBにdataURLを保存してローカルURL(JS)

export const addFile = (nameArg: String, dataURL: String) => { 
Files.insert({ 
    _id: uuid(), 
    name: nameArg, 
    url: dataURL 
}); 
console.log("file "+nameArg+" added"); 
}; 

export const Files = new Mongo.Collection('files'); 

とADDFILE機能:私はMongoDBに、と私は例のためにそれを使用することができURLはまだ のSRCとして表示するための出力は、私は自分のコレクションを作成しますreact-jsonschema-formパッケージを使用してファイル形式を表示します

<Form 
    schema={{ 
    type: 'object', 
    properties: { 
     file: { 
     type: 'string', 
     title: 'Upload an image to get its URI' 
     } 
     } 
    }} 
    uiSchema={{ 
    file: { 
     'ui:widget': 'file' 
    } 
    }} 
    onChange={this.onChange} 
    liveValidate 
    > 
    <div /> 
</Form> 

私のonChange機能:

onChange = (e: { formData: { file: string } }) =>{ 
    const [dataType, nameBis,] = e.formData.file.split(';'); 
    const name = nameBis.split('=')[1]; 
    Promise.resolve().then(addFile(name, e.formData.file)); 

} 

そして、私はこの画像を使用できるようにwindow.location.host+'/file/'+name としてアドレスsushを使用したいと思います。 私はそれが可能であると信じていますが、どうですか?すべての応答のための

感謝:)

答えて

0

これは非常に多くの可能性とパッケージcfs:standard-packagescfs:filesystemを使用して安全な方法です。率直に言って、私はあなたの質問に深く関わっていませんでした。

美しいパッケージです。 here packages in depthを読むことができます。

CODEはショートでは、ファイルシステムCOLLECTION

var imageStore = new FS.Store.FileSystem("YOUR_COLLECTION_NAME"); 

YOUR_COLLECTION_NAME = new FS.Collection("YOUR_COLLECTION_NAME", { 
    stores: [imageStore] 
}); 

を作成します。ファイルは、兄弟にbundle/の場所cfs/files/YOUR_COLLECTION_NAMEに保存されます。ファイルに関する情報は、コレクションcfs.YOUR_COLLECTION_NAME.filerecordに保存され、一時的な場所は、コレクションcfs._tempstore.chunksで内部目的で使用されます。

上記のパッケージを使用してファイルを保存する場合。メタデータは、クライアント側で

{ 
    "_id" : "TBmxbsL2cMCM2tEc7", 
    "original" : { 
     "name" : "photo.jpg", 
     "updatedAt" : ISODate("2017-07-06T12:54:50.115Z"), 
     "size" : 2261, 
     "type" : "image/jpeg" 
    }, 
    "uploadedAt" : ISODate("2017-07-08T06:58:32.433Z"), 
    "copies" : { 
     "YOUR_COLLECTION_NAME" : { 
      "name" : "photo.jpg", 
      "type" : "image/jpeg", 
      "size" : 2261, 
      "key" : "YOUR_COLLECTION_NAME-TBmxbsL2cMCM2tEc7-photo.jpg", 
      "updatedAt" : ISODate("2017-07-08T06:58:32.475Z"), 
      "createdAt" : ISODate("2017-07-08T06:58:32.475Z") 
     } 
    } 
} 

以下のようcfs.YOUR_COLLECTION_NAME.filerecord内に保存されます、あなたはファイルに

YOUR_COLLECTION_NAME.find({"_id" : "TBmxbsL2cMCM2tEc7"}).url();

このURLはトークンベースに安全なリンクを使用して文書ファイルへのリンクを取得することができますサーバーへの直接の場所の代わりに。通常のコレクションと同じように、ダウンロード用の追加の許可/拒否設定を追加で設定できます。お役に立てれば!

+0

私のコードでは、すでにbase64のdataURLとしてフルイメージを持っているので、ちょうど小さなfsに格納したいと思います。私はcfs:* docsを見てきました。私はフォームを.jsxファイルのreact.componentとして定義しているので、挿入するステップに問題があります。そのため、onChange関数のデータはevent.formDataに含まれています.fileをbase64として使用します。 –

+0

あなたは反応しているか火花を使っているかは関係ありません。そのファイルを 'FS.File'インスタンスに割り当て、このインスタンスをFileコレクションに割り当てれば完了です。それは簡単です。 –

+0

問題は解決しました。 '.url()'はうまくいかず、cfs:filesystemがアップロードされたファイルを置く方法のために 'window.location.origin + '/ cfs/files/uploads /' + fileObj._id'。ありがとう –

関連する問題