我在ASP.Net MVC中实现了文件上传。我创建了一个视图模型,它将上传的文件作为HttpPostedFileWrapper
接收,并且在控制器操作中我可以将文件保存到磁盘。
但是,我想执行实际的save in service方法,该方法位于没有实现System.Web
的类库中。因此,我无法将HttpPostedFileWrapper
对象传递给服务方法。
有没有人知道如何实现这一点,要么将文件作为不同的对象接收,要么在传递之前将其转换为其他对象。我能想到的唯一方法是将文件内容读入MemoryStream,并将其与其他参数(如文件名)一起传递,但只是想知道是否有更好的方法?
由于
答案 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[]
已经包含了您的所有内容。