2017-02-19 13 views
0

私たちのアプリケーションには、OnlyOfficeエディタが統合されています。 .docxファイルを自分のPCからOnlyOfficeサーバーにアップロードして、編集用に後で使用できるようにします。私はformdataを使用してサーバーにPOST要求を出していますが、動作していません。以下は私のjavascriptコードです:javascriptを使用してOnlyOfficeでdocxファイルをアップロードできません

app.post('/topic/:id/upload', (req, res) => { 
    docManager.init(__dirname, req, res); 
    //docManager.storagePath(''); // mkdir if not exist 
    const userIp = docManager.curUserHostAddress(); 
    const uploadDir = `./public/${configServer.get('storageFolder')}/${userIp}`; 
    const form = new formidable.IncomingForm(); 
    form.uploadDir = uploadDir; 
    form.keepExtensions = true; 

    form.parse(req, (err, fields, files) => { 
    const file = files.uploadedFile; 
    file.name = docManager.getCorrectName(file.name); 

    if (configServer.get('maxFileSize') < file.size || file.size <= 0) { 
     fs.unlinkSync(file.path); 
     res.writeHead(200, { 'Content-Type': 'text/plain' }); 
     res.write('{ "error": "File size is incorrect"}'); 
     res.end(); 
     return; 
    } 

    const exts = [].concat(
     configServer.get('viewedDocs'), 
     configServer.get('editedDocs'), 
     configServer.get('convertedDocs') 
    ); 
    const curExt = fileUtility.getFileExtension(file.name); 

    if (exts.indexOf(curExt) === -1) { 
     fs.unlinkSync(file.path); 
     res.writeHead(200, { 'Content-Type': 'text/plain' }); 
     res.write('{ "error": "File type is not supported"}'); 
     res.end(); 
     return; 
    } 

    fs.rename(file.path, `${uploadDir}/${file.name}`, (err2) => { 
     res.writeHead(200, { 'Content-Type': 'text/plain' }); 
     if (err2) { 
     res.write(`{ "error": "${err2}"}`); 
     } else { 
     res.write(`{ "filename": "${file.name}"}`); 

     const userid = req.query.userid ? req.query.userid : 'uid-1'; 
     const firstname = req.query.firstname ? req.query.firstname : 'Jonn'; 
     const lastname = req.query.lastname ? req.query.lastname : 'Smith'; 

     docManager.saveFileData(file.name, userid, `${firstname} ${lastname}`); 
     docManager.getFileData(file.name, docManager.curUserHostAddress()); 
     } 
     res.end(); 
    }); 
    }); 
}); 

最初は、form.parse()呼び出しでファイル配列があります。この配列は空になっています。それゆえ、私のようにエラーを取得しています:後

TypeError: Cannot read property 'name' of undefined

は私のコンポーネントのコードです:

uploadFile(topicId: any, files: File[]) { 
    this.fileToUpload = files[0]; 
    let apiUrl = "/topic/" + topicId + "/upload"; 
    let headers = new Headers(); 
    headers.append('authorization', 'Bearer ' + localStorage.getItem('id_token')); 
    headers.append('Access-Control-Allow-Origin', '*'); 
    let data = new FormData(); 
    data.append('file', this.fileToUpload); 
    this.ooApiService.postUrl(apiUrl, data, {headers}) 
    .toPromise() 
    .catch(
     (error: any) => this.handleError(error) 
    ); 
    } 

HTMLコード:

<form action="/upload" enctype="multipart/form-data" method="post"> 
    <input class="chooseFile" id="uploadedFile" type="file" [disabled]="isChosen" #fileInput (change)="chooseImage(fileInput.files)"/> 
    <button *ngIf="userCanEditDetails" md-raised-button color="primary" (click)="uploadFile(topic.id, fileInput.files)"> 
     {{ "Upload file" | translate }} 
    </button> 
    </form> 

私は私のクライアントアプリケーションから、このPOSTリクエストを呼び出していますこれはangular2にあり、ここからフォームデータとしてファイルを選択して渡しています。 誰かがこの問題を解決するのに手伝ってくれますか? ありがとうございます。

答えて

0

統合の例を使用していることに注意してください。 このアプリケーションは、ドキュメントエディタの機能を実演するために使用され、本番環境での使用はお勧めしません。 あなたから提供された情報によると、ドキュメントはONLYOFFICEサーバーに送信されていません

テストサンプルのデフォルトバージョンは完全に機能していますので、変更後に動作しない理由を理解してくださいクライアントの部分を分析します。ファイルを文書マネージャーにアップロードする方法のコードをお送りください。 POSTリクエストを送信するときに、ファイルの詳細を含むコンテンツを送信していない可能性があります。

+0

私はクライアントコードを追加しました。ありがとう:) –

関連する問題