【问题标题】:Upload data with file使用文件上传数据
【发布时间】:2017-05-02 06:27:11
【问题描述】:

我必须将文件连同有关这些文件的一些描述发送到服务器。

所以根据上图,我想上传一个文件并在其右侧的文本框中提供文件描述。点击选择文件链接后,用户可以选择另一个文件上传,它也会有描述文本框。点击上传文件后,连同文件的描述一起上传到服务器。 我正在使用 plupload 来做到这一点。但它只是上传文件而不是描述。 另外,我正在使用 MVC。因此,请建议任何解决方案或建议任何其他可以满足我要求的 JavaScript 库。

下面是MVC代码,

           public string Upload(List<HttpPostedFileBase> fileUploads,List<string> fileDescription) 
    {
        int count = 0;
        foreach (HttpPostedFileBase file in fileUploads)
        {
            byte[] fileData = new byte[file.ContentLength];
            file.InputStream.Read(fileData, 0, file.ContentLength);
            db.UploadedFiles.AddObject(new UploadedFile
            {
                FileDescription = fileDescription[count],
                FileBinary = fileData,
                FileName = file.FileName
            });
            count++;
        }
        db.SaveChanges();
        return "Success";
    }

下面是javascript代码

      var uploadFiles = [];
        var descs = [];
        var count = 0;
        plupload.each(uploader.files, function (file) {
        var id = file.id;
        var fileUpload = file;
        uploadFiles[count] = file;
        descs[count] = $("#" + id + "_desc").val();
        count++;
    });
    var da = { fileDescription: descs,fileUploads: uploader.files };
            $.ajax({
            url: '/LumosQC/Upload',
               data: da,
               method: 'POST',
            }).done(function (data1) {
                alert("Success");
            }).error(function (a, b, c) {
               console.log(a);
           });

【问题讨论】:

标签: c# jquery asp.net-mvc file plupload


【解决方案1】:

您可以修改用于上传的路线并使用类似

...
        [Route("upload/{description}")]
        public HttpResponseMessage Upload(string description)
...

或者您可以将描述放入 cookie(但我建议使用第一种更简洁的方法)

function createCookie(name,value,days) {
    var expires = "";
    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days*24*60*60*1000));
        expires = "; expires=" + date.toUTCString();
    }
    document.cookie = name + "=" + value + expires + "; path=/";
}

createCookie('desciption', 'your description', 1)

然后

Request.Cookies["description"]

更新

现在我看到您需要上传多个文件,因为您可以使用相同的方法来修改路由

[Route("upload")]
public string Upload(List<HttpPostedFileBase> fileUploads, [FromUri] string[] fileDescription)

【讨论】:

  • 但我得到的一切都是空的,文件上传和文件描述也是
  • 用我的方法?
  • 您询问了如何提供描述,但您没有找到上传任何内容的方法并不是很清楚,请更新您的问题
【解决方案2】:

创建视图模型并在动作方法中用作参数,

视图模型:

public class UploadViewModel
{
    public List<string> FileDescriptions;
    public List<HttpPostedFileBase> Files;
}

动作方法:

public string Upload(UploadViewModel model) 
{
    // ....
}

这将正确绑定数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    • 2012-06-09
    • 2016-01-18
    • 1970-01-01
    • 2013-09-29
    相关资源
    最近更新 更多