我正在使用此代码创建临时文件并获取其路径:
public ActionResult Comp(string Link)
{
var sv = Server.MapPath(Link);
int quality = 45;
string tempFile = Path.GetTempFileName();
System.IO.File.Copy(sv, tempFile, true);
using (var myBitmap = Image.FromFile(tempFile))
{
ImageCodecInfo myImageCodecInfo = GetEncoderInfo("image/jpeg");
Encoder myEncoder = Encoder.Quality;
EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, quality);
EncoderParameters myEncoderParameters = new EncoderParameters(1);
myEncoderParameters.Param[0] = myEncoderParameter;
myBitmap.Save(sv, myImageCodecInfo, myEncoderParameters);
}
System.IO.File.Delete(tempFile);
return RedirectToAction("Index");
}
private static ImageCodecInfo GetEncoderInfo(String mimeType)
{
int j;
ImageCodecInfo[] encoders;
encoders = ImageCodecInfo.GetImageEncoders();
for (j = 0; j < encoders.Length; ++j)
{
if (encoders[j].MimeType == mimeType)
return encoders[j];
}
return null;
}
Comp功能在图像压缩器中使用。它获取字符串文件路径,在C:\Users\User1\AppData\Local\Temp
中通过Link
中的获取图像创建tmp文件,然后编码具有设置质量的tmp文件并将tmp文件设置为获取图像,最后删除tmp文件。但是此代码在C:\Users\User1\AppData\Local\Temp
中创建和删除临时文件。我想在特定路径中创建临时文件,因为我的服务器没有获得此路径的权限。所以这段代码可能如下:
string tempFile = Path.GetTempFileName("/Content/temp/");
//It gets error that do not have overload method of GetTempFileName
答案 0 :(得分:2)
如果问题是代码在temp文件夹中没有权限,那么如何在代码确实具有权限的文件夹中创建唯一文件名呢?函数Path.GetRandomFileName()
将这样做。它不会为您创建文件,它只是创建一个随机文件名,您可以在您选择的文件夹中使用它。为了更加安全,您可以先检查文件是否已存在,但这种可能性很小。
示例:
String folderPathThatYouCanWriteTo = "Your Writable Path here";
String fullFilePath = null;
do
{
fullFilePath = String.Format(@"{0}\{1}", folderPathThatYouCanWriteTo, Path.GetRandomFileName());
} while (File.Exists(fullFilePath));
//Now you can use fullFilePath
etc.