1

我正在考虑编写一个 C# 客户端应用程序。在这个应用程序中,我需要将文件上传到服务器并让服务器响应字符串(上传文件的唯一标识符。)

我对 C# 和 ASP.Net MVC 都很熟悉,也很熟悉。我可以使用这些技术以相对安全的方式执行此操作,还是需要使用某种 WCF Web 服务 thingie-mah-jig?(我注意到“相对安全”,因为上传的任何内容都不会保密,而且绝对不是关键任务)

无论哪种情况,有关该主题的任何资源(即使它恰好位于 VB.Net 中)都会很棒。

非常感谢你!

编辑:发布一些代码。我有一个简单的网站,只有一个接受带有文件的 POST 的事件:

    [HttpPost]
    public string Upload(HttpPostedFileBase file)
    {
        string sPath = "";

        if (file != null && file.ContentLength > 0)
        {
            try
            {
                string sFileName = "test.txt";

                // Save file
                sPath = Path.Combine(Server.MapPath("~/App_Data/uploads"), sFileName).ToString();
                file.SaveAs(sPath);

                // Return val
                return sPath;
            }
            catch
            {
                return "Error on Save .. tried to save to\n" + sPath;
            }
        }

        return "no file";
    }

在客户端,C# 应用程序执行以下操作:

        using (WebClient wc = new WebClient())
        {
            try
            {
                byte[] bResponse = wc.UploadFile("http://127.0.0.1/ISSHost/file/upload", "POST", "C:\\test.txt");
                string sResponse = System.Text.Encoding.ASCII.GetString(bResponse);
                MessageBox.Show("\nResponse received: " + sResponse);
            }
            catch(Exception exception)
            {
                string sError = exception.ToString();
                if (exception.InnerException != null)
                    sError += "\n" + exception.InnerException.ToString();

                MessageBox.Show("Error!\n" + sError);
            }
        }

        this.Dispose();
    }

有用。我想知道的是,如果我以完全错误的方式处理这个问题,或者我可能会暴露什么样的安全漏洞......等等。我这样做会产生什么影响?有没有更好的办法?

更重要的是,如何防止最终用户尝试导航到上传页面(在这种情况下——http://127.0.0.1/ISSHost/file/upload实际上页面没有“GET”部分,所以它只有 404。)

再次感谢!

4

1 回答 1

0

请尝试在客户端使用 github 的 fileuploader.js 并返回字符串,您的服务器端代码将是这样的..

[HttpPost]    
public ActionResult Upload(string fileName)
{

------------
//your code ...

return Json(new{resultString="Uploaded Successfully."});
} 
于 2012-12-23T02:52:40.627 回答