我有一个复合C1 4.04网站。
用户需要一个博客 - 他们可以上传图片。
然而,图像进入一些显然不存在的奇怪的虚拟“媒体”文件夹 - 并且它们不像普通图像那样存储。
我希望他们只是进入一个普通文件夹 - 因为我需要稍后操作它们 - 重新压缩它们(例如)。
我该怎么做?
THX
答案 0 :(得分:1)
媒体文件可插入Composite C1,默认实现媒体文件表示为
这具有一定的优势 - 拥有数据库记录允许保留与提供http请求(例如MimeType)相关的其他元数据,对这些文件应用安全性等。 ;文件名也不遵循文件系统限制(例如路径长度和某些保留名称/禁止字符) - 所以当你上传文件时, 如果网站文件夹路径+媒体文件夹路径+文件名超过255个字符,您不必关心。
还有其他媒体档案插件,当f.e。文件保存在SQL数据库中,或者从Facebook相册中提取文件。
如果要压缩图像文件,可以迭代\ App_Data \ Media \文件夹中的文件。您可以通过在DataConnection实例上调用Get()来获取媒体文件列表。
如果要将媒体导出到其他解决方案,可以使用以下代码将Composite C1媒体文件夹复制到物理文件夹:
private int MediaToFiles(string mediaFolder, string physicalFolder)
{
if (!mediaFolder.StartsWith("/"))
{
mediaFolder = "/" + mediaFolder;
}
string mediaFolderPrefix = mediaFolder == "/" ? "/" : mediaFolder + "/";
using (var conn = new DataConnection())
{
var mediaFiles = conn.Get<IMediaFile>().Where(f => string.Equals(f.FolderPath, mediaFolder, StringComparison.OrdinalIgnoreCase)
|| f.FolderPath.StartsWith(mediaFolderPrefix, StringComparison.OrdinalIgnoreCase))
.ToList();
if(mediaFiles.Count == 0) return 0;
Directory.CreateDirectory(physicalFolder);
int newFiles = 0;
foreach (var file in mediaFiles)
{
string targetFolder = file.FolderPath.Length <= mediaFolderPrefix.Length ?
physicalFolder : Path.Combine(physicalFolder, file.FolderPath.Substring(mediaFolderPrefix.Length));
Directory.CreateDirectory(targetFolder);
string targetFilePath = Path.Combine(targetFolder, file.FileName);
if(File.Exists(targetFilePath) && File.GetLastWriteTime(targetFilePath) == file.LastWriteTime) continue;
using (var stream = file.GetReadStream())
{
using (var outputStream = File.Create(targetFilePath, 8192))
{
stream.CopyTo(outputStream);
outputStream.Close();
}
}
File.SetLastWriteTime(targetFilePath, file.LastWriteTime.Value);
newFiles++;
}
return newFiles;
}
}
// Example of usage:
int newFiles = MediaToFiles("/", @"c:\Temp\C1media"); // Copying all the media files
OutPut("New files: " + newFiles);
int newFiles2 = MediaToFiles("/Office", @"c:\Temp\C1media\Office pictures"); // Copying only "Office" media folder
OutPut("New files: " + newFiles2);