将HttpUploadedFileWrapper转换为不在System.Web中的内容

时间:2016-04-21 14:50:20

标签: c# asp.net

我在ASP.Net MVC中实现了文件上传。我创建了一个视图模型,它将上传的文件作为HttpPostedFileWrapper接收,并且在控制器操作中我可以将文件保存到磁盘。

但是,我想执行实际的save in service方法,该方法位于没有实现System.Web的类库中。因此,我无法将HttpPostedFileWrapper对象传递给服务方法。

有没有人知道如何实现这一点,要么将文件作为不同的对象接收,要么在传递之前将其转换为其他对象。我能想到的唯一方法是将文件内容读入MemoryStream,并将其与其他参数(如文件名)一起传递,但只是想知道是否有更好的方法?

由于

1 个答案:

答案 0 :(得分:1)

最好的方法可能是检索图像数据(作为byte[])和图像的名称(作为string)并将它们传递给您的服务,类似于您的方法提到:

public void UploadFile(HttpPostedFileWrapper file)
{
        // Ensure a file is present
        if(file != null)
        {
            // Store the file data 
            byte[] data = null;
            // Read the file data into an array
            using (var reader = new BinaryReader(file.InputStream))
            {
                data = reader.ReadBytes(file.ContentLength);
            }
            // Call your service here, passing along the data and file name
            UploadFileViaService(file.FileName, data);
        }
}

由于byte[]string是非常基本的原型,因此将它们传递给其他服务应该没有问题。 Stream可能也可以正常运行,但它们可能会出现关闭等问题,而byte[]已经包含了您的所有内容。