Javascript Plupload块大小将文件重命名为Blob

Javascript Plupload块大小将文件重命名为Blob,javascript,c#,model-view-controller,plupload,Javascript,C#,Model View Controller,Plupload,我使用Plupload来下载文件。我们的配置如下所示: $("#uploadData").pluploadQueue({ // General settings runtimes: 'html5,flash,silverlight,html4', url: serviceurl, // Maximum file size max_file_size: '50mb', chunk_size: '1m

我使用Plupload来下载文件。我们的配置如下所示:

$("#uploadData").pluploadQueue({
        // General settings
        runtimes: 'html5,flash,silverlight,html4',
        url: serviceurl,

        // Maximum file size
        max_file_size: '50mb',

        chunk_size: '1mb',

        max_file_count: 50,

        unique_names: true,

        // Resize images on clientside if we can
        resize: {
            width: 200,
            height: 200,
            quality: 90,
            crop: true // crop to exact dimensions
        },

        // Specify what files to browse for
        filters: [
            { title: "Documents Excel", extensions: "xlsx" }
        ],

        init: {

            FilesAdded: function (up, files) {
                up.start();
            },

            UploadComplete: function (up, files) {
                if (up.total.uploaded == up.files.length) {
                    $(".plupload_buttons").css("display", "inline");
                    $(".plupload_upload_status").css("display", "inline");
                    up.init();
                }
            }
        },
我的问题是,当我上传一个大于1MB的文件时,我没有收到正确的名称,而是收到了Blob作为名称。 例如,我的文件名为“Test.xlsx”,大小为2MB,在服务器端,我将收到“blob”作为name而不是Test

限制,我不允许更改客户端的卡盘大小限制。 我怎样才能得到正确的名字

谢谢你的帮助

用于在服务器端接收数据的代码:

[System.Web.Mvc.HttpPost]
        public ActionResult UploadData(int? chunk, string name)
        {
            var fileUpload = Request.Files[0];

            if (Session["upDataFiles"] == null)
            {
                Session["upDataFiles"] = new List<FileUploadViewModel>();
            }

            Session["upDataFiles"] = UpdateTempDataUpload(fileUpload.FileName, name, (List<FileUploadViewModel>)Session["upDataFiles"]);

            UploadFile(chunk, name);
            return Content("chunk uploaded", "text/plain");
        }

private void UploadFile(int? fileChunk, string fileName)
        {
            var fileUpload = Request.Files[0];
            var uploadPath = Server.MapPath("~/App_Data");
            var fullPath = Path.Combine(uploadPath, fileName);
            fileChunk = fileChunk ?? 0;
            using (var fs = new FileStream(Path.Combine(uploadPath, fileName), fileChunk == 0 ? FileMode.Create : FileMode.Append, FileAccess.Write, FileShare.ReadWrite))
            {
                var buffer = new byte[fileUpload.InputStream.Length];
                fileUpload.InputStream.Read(buffer, 0, buffer.Length);
                fs.Write(buffer, 0, buffer.Length);
                fs.Close();
            }
        }
[System.Web.Mvc.HttpPost]
public ActionResult UploadData(整块,字符串名称)
{
var fileUpload=Request.Files[0];
if(会话[“UpdateFiles”]==null)
{
会话[“UpdateFiles”]=新列表();
}
会话[“UpdateFiles”]=UpdateTempDataUpload(fileUpload.FileName,name,(List)会话[“UpdateFiles”]);
上传文件(区块、名称);
返回内容(“上传的区块”、“文本/普通”);
}
私有void上传文件(int?fileChunk,字符串文件名)
{
var fileUpload=Request.Files[0];
var uploadPath=Server.MapPath(“~/App_Data”);
var fullPath=Path.Combine(上传路径,文件名);
fileChunk=fileChunk±0;
使用(var fs=new FileStream(Path.Combine(uploadPath,fileName),fileChunk==0?FileMode.Create:FileMode.Append,FileAccess.Write,FileShare.ReadWrite))
{
var buffer=新字节[fileUpload.InputStream.Length];
fileUpload.InputStream.Read(buffer,0,buffer.Length);
fs.Write(buffer,0,buffer.Length);
fs.Close();
}
}

当我在request.File对象中检查名称时,它是blob而不是实际名称。

上详细描述了此问题。这可能有点令人困惑,但据我所知:

  • 如果使用块,$\u文件['name']将强制成为'blob'
  • 他们似乎声称$_REQUEST['name']应该是真名,但用户似乎不同意
  • 作为一种解决方法,建议在另一个表单字段或url参数中发送文件名(例如使用
    BeforeUpload
    事件来设置该信息)。您可以设置
    multipart_params
    并将信息存储在之前添加的文件对象上,或者查看html中的字段以获取此时的信息

    • 要稍微扩展nus的答案:

      如中所述,我在Javascript中使用了
      BeforeUpload
      事件,然后不得不在服务器端进行更改

      之前,要获取我使用的文件名,请执行以下操作:

      var file = Request.Files[f];
      var fileName = file.FileName 
      
      然而,这就是返回“
      blob
      ”的地方。相反,我做了一个更改,所以当我仍然使用
      Request.Files[f]
      作为文件详细信息时,我得到了如下文件名:

      var file = Request.Files[f];
      var fileName = Request.Params["name"];
      

      在init下使用BeforeUpload事件,如下所示:

      init : {
          BeforeUpload: function(up, file) {
              log('[BeforeUpload]', 'File: ', file);
          }
      }
      
      还添加日志功能:

      function log() {
      var str = "";
      
      plupload.each(arguments, function(arg) {
          var row = "";
      
          if (typeof(arg) != "string") {
              plupload.each(arg, function(value, key) {
                  // Convert items in File objects to human readable form
                  if (arg instanceof plupload.File) {
                      // Convert status to human readable
                      switch (value) {
                          case plupload.QUEUED:
                              value = 'QUEUED';
                              break;
      
                          case plupload.UPLOADING:
                              value = 'UPLOADING';
                              break;
      
                          case plupload.FAILED:
                              value = 'FAILED';
                              break;
      
                          case plupload.DONE:
                              value = 'DONE';
                              break;
                      }
                  }
      
                  if (typeof(value) != "function") {
                      row += (row ? ', ' : '') + key + '=' + value;
                  }
              });
      
              str += row + " ";
          } else {
              str += arg + " ";
          }
      });
      
      var log = $('#log');
      log.append(str + "\n");
      // log.scrollTop(log[0].scrollHeight);
      }
      
      然后您可以在
      $\u POST['name']
      $\u REQUEST['name']
      中获取文件名。 您还可以将
      唯一\u名称设置为
      false

      您还可以找到帮助

      如何检索它?这是正确的,几个月前我不得不解决相同的问题。