临时存储文件
本文关键字:存储文件 | 更新日期: 2023-09-27 18:09:01
我的图像拖放函数的代码如下:问题是它暂时将文件保存到我的计算机@"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();
}
上传图片到imahehost的方法(不知道是否相关):
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;
}
看看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
与其使用硬编码字符串,不如使用以下命令来查找存放临时文件的临时文件夹:
string tempPath = System.IO.Path.GetTempPath();
我认为有两个解决方案:
N°1:服务器上的一个任务,假设每天检查2次,如果有任何文件必须删除
N°2:由应用程序调用的过程,用于验证文件的Now和过期日期之间的差异。