我想从完全正常工作的文件上传控件中保存一个文件。我已收到HttpPostedFile file = HttpContext.Current.Request.Files[0];
,我想将其保存在我的服务器上。
我的服务器名为“appharbor”(https://appharbor.com/),它的规格说明我对Path.getTempPath();
文件夹有文件写入权限。
我保存文件的代码是:
HttpPostedFile file = HttpContext.Current.Request.Files[0];
string dirrectoryPath =Path.GetTempPath();
string fileName = Path.GetFileName(file.FileName);
string mapPath = HttpContext.Current.Server.MapPath(dirrectoryPath);
Directory.CreateDirectory(mapPath);
string fileFullPath = Path.Combine(mapPath, fileName);
file.SaveAs(fileFullPath);
myModel.uri = fileFullPath;
如何以工作方式重新制作此代码?
查看:
String pdf = "http://docs.google.com/gview?url=" + @Model.uri + "&embedded=true";
<iframe src="@pdf" style="width:100%; height: 1000px;" frameborder="0"></iframe>
修改
详细信息现在发生了什么,稍有变化:
当我有
时string dirrectoryPath = Path.GetTempPath();
然后发生在服务器上:
POST http://warsztatynet.apphb.com/api/upload 500 (Internal Server Error)
并且在本地发生
An exception of type 'System.Web.HttpException' occurred in System.Web.dll but was not handled in user code
Additional information: 'C:/Users/Tunczyk/AppData/Local/Temp/' expected virtual path.
我怀疑它们是完全相同的,因为这两种情况都发生在相同的功能中。
Path.GetTempPath();
在Web服务器和localhost上的App_Data文件夹
当我有
时string dirrectoryPath ="~/App_Data";
然后发生在服务器上:
GET http://c/Users/MyPath/sample.rtf 404 (Not Found)
并且在本地发生:
GET http://c/Users/MyPath/sample.rtf 404 (Not Found)
编辑2 这是Caóticofanegas帖子的答案:
Not allowed to load local resource: file:///D:/Users/apphb5dac91d9317868/AppData/Local/Temp/glyphicons-halflings.png
当我这样做时会发生这种情况:
string dirrectoryPath = Path.GetTempPath();
string fileName = Path.GetFileName(file.FileName);
Directory.CreateDirectory(dirrectoryPath);
string fileFullPath = Path.Combine(dirrectoryPath, fileName);
file.SaveAs(fileFullPath);
伙计们,我正在寻找最简单的方法。它不是商业应用。这只适合大学。
编辑3
为了更容易理解,我会给你一个指向我的申请的链接: MyWebsite 要测试你必须:
应该显示你的文件,但它不是(在主视图中 - 单击div)。
我建议您使用谷歌浏览器,因为在其他浏览器中您可能会遇到一些视觉问题。
答案 0 :(得分:3)
您必须将文件存储在提供的路径中的任何位置,然后使用FileResult操作结果使用操作来检索该文件
public FileResult file(string fileName)
{
return File(Path.Combine(Path.GetTempPath(), fileName), System.Net.Mime.MediaTypeNames.Application.Octet);
}
这不是完整的解决方案,但应该让你走在正确的轨道上。
答案 1 :(得分:1)
看起来HttpPostedFile.SaveAs()
需要一个虚拟路径来保存文件。如果您不通过"~/App_data"
将其翻译为本地路径,则Server.MapPath()
方法应该有效。
如果您被迫保存到TempPath(例如,权限有问题),我猜您可以使用Stream.CopyTo()
方法将文件保存在随机物理路径上。
using (var newFile = System.IO.File.Create("local_path"))
{
fil.InputStream.CopyTo(newFile);
}
此代码直接来自我的头脑,因此,并非100%可靠。可能需要一些工作。