我有这个代码用于图像的拖放功能。它的问题是它暂时将文件保存到我的计算机@"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上传到imahehost的方法(如果相关则为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;
}
答案 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和文件的截止日期之间的差异。
希望这些想法可以提供帮助。