簡體   English   中英

如何上傳文件 - sails.js

[英]How to upload files - sails.js

我可以下載圖像和pdf,但我無法下載文件文件(.doc .pptx .odt ...)

下載文檔(.doc .pptx .odt ...)時,只下載.ZIP XML文件。 我可以做什么?

我正在使用: 填寫上傳文件文檔

upload: function (req, res) {
  req
    .file('avatar')
    .upload({
      maxBytes: 10000000
    }, function whenDone(err, uploadedFiles) {
      if (err) {
        return res.negotiate(err);
      }

      // Generate a unique URL where the avatar can be downloaded.
      avatarUrl = require('util').format('%s/user/avatar/%s', sails.getBaseUrl(), req.session.User.id_user),
      // Grab the first file and use it's `fd` (file descriptor)
      avatarFd = uploadedFiles[0].fd

      var SkipperDisk = require('skipper-disk');
      var fileAdapter = SkipperDisk(/* optional opts */);

      // Stream the file down
      fileAdapter.read(avatarFd).on('error', function (err){
        return res.serverError(err);
      }).pipe(res);

  });
},

我在Windows上使用它,它沒有問題。

upload  : function (req, res) {
  req.file('avatar').upload({
    maxBytes: 10000000
  }, function whenDone(err, uploadedFiles) {
    if (err) {
      return res.negotiate(err);
    }

    var avatarFd = uploadedFiles[0].fd;

    res.ok(avatarFd);

  });
},
download: function (req, res) {
  var location = req.param('fd');
  var SkipperDisk = require('skipper-disk');
  var fileAdapter = SkipperDisk(/* optional opts */);
  fileAdapter.read(location).on('error', function (err) {
    return res.serverError(err);
  }).pipe(res);
}

首先使用/somecontroller/upload with multipart/form-data /somecontroller/upload它,它將返回一個fd位置。 並使用此URL下載它

http://localhost:1337/somecontroller/download?fd=[fd-from-upload-return]

控制器名稱和主機名取決於您的應用程序配置。

使用fd完整路徑只是一個例子,在生產之后你應該使用你自己的控制器從上傳的文件夾中尋址到已經上傳的文件,它通常在.tmp/uploads/

所以你使用的是一個名為Skipper的Sails.js生態系統的庫。 它有一些可能對您有幫助的文檔。

它會將您的文件保存到上傳時的隨機GUID,直到您選擇對其執行操作為止。 我的猜測是它沒有攜帶“.docx”標簽,當它這樣做時.docx文件實際上只是拉鏈。 (也許這是你可以提交的錯誤?)

我的建議是使用saveAs選項。 您可以指定要用作保存位置的字符串。 即:

req.file('file_upload').upload({saveAs: Guid.raw()+'.docx'}, handleUploadCompletion);

還可以傳遞函數,以便根據流處理多文件上載。

我想您在回復中忘記了一些HTTP標頭

  • 內容處理:設置您要發送的文件的名稱
    • 例如“attachment; filename =”ecd1c7c2-6e32-4110-8905-c003a4713bb0.odt“”
  • 內容類型:您要發送的內容的MIME類型
    • 例如“application / vnd.oasis.opendocument.text”

您可以手動設置它們或使用res.attachment方法:

res.attachment(avatarFd);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM