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

本文关键字:Web System HttpUploadedFileWrapper 转换 | 更新日期: 2024-11-04 17:05:19

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

但是,我想执行实际的保存在服务方法中,该方法位于未实现System.Web的类库中。 因此,我无法将HttpPostedFileWrapper对象传递给服务方法。

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

谢谢

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

最好的方法可能是检索图像数据(作为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[]已经拥有您的所有内容。