保存并访问Web服务器和localhost上的文件

时间:2014-06-05 13:30:51

标签: c# file asp.net-mvc-4 upload appharbor

我想从完全正常工作的文件上传控件中保存一个文件。我已收到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 要测试你必须:

  1. 按“课程创建”选项卡
  2. 按下按钮+
  3. 按任意课程架构
  4. 按任何彩色div
  5. 从列表中选择文件类型
  6. 上传文件
  7. 应该显示你的文件,但它不是(在主视图中 - 单击div)。

    我建议您使用谷歌浏览器,因为在其他浏览器中您可能会遇到一些视觉问题。

2 个答案:

答案 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%可靠。可能需要一些工作。