所以我有以下方法无法改变:
public async Task<User> UploadSaa(string filepath, User user)
{
Assembly cesCommon = Assembly.GetExecutingAssembly();
byte[] saaBytes = null;
using (Stream saarStream = cesCommon.GetManifestResourceStream(name))
using (MemoryStream saaMemoryStream = new MemoryStream())
{
saaStream.CopyTo(saarMemoryStream);
saaBytes = saaMemoryStream.ToArray();
user.Saa = saaBytes;
}
user = await SaveNewUser(user);
return user;
}
在之前的使用中,filepath直接传递给它,以便初始化数据库进行测试。但是,现在我需要找到一种方法将变量字符串传递给生产中的UploadSaa(),b / c,用户将从他们自己的系统中选择自己的文件,而我无法为他们指定文件路径。我尝试使用OpenFileDialog,但它返回一个文件,而不是路径
我的问题是:如何修改OpenFileDialog以接受文件的路径,然后将其传递给UploadSaa?有更好的选择吗?如果我必须修改UploadSaa,那么更改应该是什么?
答案 0 :(得分:0)
您应该能够从openFileDialog object.FileName
获取完整路径OpenFileDialog object= new OpenFileDialog();
string fullPath = object.FileName;
或
您还可以查看其他选项,例如使用FolderBrowserDialog。
请参阅this示例。
我希望有所帮助!
答案 1 :(得分:0)
您的问题不明确,实际上您使用asp.net mvc发布了标签,而您正在使用OpenFileDialog?这与Windows窗体或Web应用程序有关吗?如果是后面的检查
尝试使用HttpPostedFileBase,从那里可以获得路径
https://msdn.microsoft.com/en-us/library/system.web.httppostedfilebase.filename(v=vs.110).aspx
[HttpPost]
public ActionResult Upload(HttpPostedFileBase file)
{...}
创建ModelBinder
public class HttpOdometerPostedFileBaseModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
if(controllerContext == null)
throw new ArgumentNullException(nameof(controllerContext));
if(bindingContext == null)
throw new ArgumentNullException(nameof(bindingContext));
HttpPostedFileBase theFile = controllerContext.HttpContext.Request.Files[bindingContext.ModelName];
return theFile;
}
}
并将其注册到global.asax.cs
System.Web.Mvc.ModelBinders.Binders[typeof(HttpPostedFileBase)] = new HttpOdometerPostedFileBaseModelBinder();
答案 2 :(得分:0)
我怀疑通过查看您的代码,您假设在Web中获取类似于桌面版的文件。在桌面版中,您可以相应地获得完整路径和读取流。但是在web中,浏览器将传递流(用于文件类型输入)而不是传递filepath。因此,您只需要有可以捕获文件流的操作。
您可以使用HttpPostedFileBase,它会为您提供流,文件名和内容长度。
你的行动方法应该是这样的:
[HttpPost]
public ActionResult MyUploadingAction(HttpPostedFileBase file)
{
var filename = file.FileName;
// For reading stream
var reader = new BinaryReader(file.InputStream);
byte[] byteData= reader.ReadBytes(file.InputStream.Length);
return View();
}