存储文件临时

时间:2014-06-18 08:21:39

标签: c#

我有这个代码用于图像的拖放功能。它的问题是它暂时将文件保存到我的计算机@"C:\Users\xxxx\Desktop\。这是一个问题,因为这意味着用户无法使用此功能。那么我如何调整我的代码以使其在线工作?

我不知何故需要找到一种临时存储图像的方法。

public ActionResult SaveUploadedFile(string test)
        {


            foreach (string fileName in Request.Files)
            {
                HttpPostedFileBase file = Request.Files[fileName];


                var filename = Path.GetFileName(file.FileName);

                var sourceimage = System.Drawing.Image.FromStream(file.InputStream);
                img = sourceimage;

                var dog = new Dog();
                byte[] tempImg = dog.imageToByteArray(sourceimage);

                var fullPath = @"C:\Users\xxxx\Desktop\" + filename;
                file.SaveAs(fullPath);



                string link = dog.UploadImage(fullPath);

                JObject o = JObject.Parse(link);

                string name = (string) o.SelectToken("data.link");

                System.IO.File.Delete(@"C:\Users\xxxx\Desktop\" + filename);
                var page = RavenSession.Load<DogContentPage>(test);
                page.Image = name;
                RavenSession.SaveChanges();



            }

将img上传到ima​​hehost的方法(如果相关则为dunno):

    public string UploadImage(string xOut)
    {



    using (var w = new WebClient())
    {
        var values = new NameValueCollection
        {
            {"image", Convert.ToBase64String(File.ReadAllBytes(xOut))}
        };

        w.Headers.Add("Authorization", "Client-ID " + ClientId);
        var response = w.UploadValues("https://api.imgur.com/3/image", values);

        var sr = new StreamReader(new MemoryStream(response));

        string result = sr.ReadLine();
        return result;


    }

3 个答案:

答案 0 :(得分:8)

查看可以帮助您的Path.GetTempPath()Path.GetTempFileName()

快速解决方案是:

 // var fullPath = @"C:\Users\xxxx\Desktop\" + filename; // Not good, since user folder
 var fullPath = Path.GetTempFileName(); // Temp file, with unqiue name

我建议Path.GetTempFileName()而不是Path.GetTempPath() + filename的原因是,当您只上传文件字节时,文件名并不重要,并且它保证了唯一的文件名,因此不可能有文件名冲突。

var fullPath = Path.GetTempPath() + filename; // No good, could clash if the filenames were the same

答案 1 :(得分:2)

您应使用以下命令查找用于存储临时文件的临时文件夹,而不是使用硬编码字符串:

string tempPath = System.IO.Path.GetTempPath();

答案 2 :(得分:1)

我认为有两种解决方案:

N°1:服务器中检查的任务,如果有任何文件必须删除,则每天说2次

N°2:您的应用程序调用的程序,用于验证Now和文件的截止日期之间的差异。

希望这些想法可以提供帮助。