PDA

View Full Version : تشخیص نوع و ورژن فایل



sm
سه شنبه 13 آذر 1386, 11:12 صبح
سلام
من نیاز دارم تا توی قسمت آپلود سایت فقط اجازه ارسال فایلهای MS Office Word 2003 با حجم مشخص رو بکاربر بدهم.
اینکه حتما 2003 باشه خیلی مهم هست.
چطوری میشه این کار رو انجام داد ؟
در نهایت هم چطور میشه چک کرد که آیا فایل واقعا آپلود شده یا نه؟

ممنون

Buggsbunny
سه شنبه 13 آذر 1386, 13:11 عصر
برای نوع فایل:


protected void UploadBtn_Click(object sender, EventArgs e)
{
// Specify the path on the server to
// save the uploaded file to.
string savePath = @"c:\temp\uploads";

// Before attempting to save the file, verify
// that the FileUpload control contains a file.
if (FileUpload1.HasFile)
{
// Get the name of the file to upload.
string fileName = Server.HtmlEncode(FileUpload1.FileName);

// Get the extension of the uploaded file.
string extension = System.IO.Path.GetExtension(fileName);

// Allow only files with .doc or .xls extensions
// to be uploaded.
if ((extension == ".doc") | (extension == ".xls"))
{
// Append the name of the file to upload to the path.
savePath += fileName;

// Call the SaveAs method to save the
// uploaded file to the specified path.
// This example does not perform all
// the necessary error checking.
// If a file with the same name
// already exists in the specified path,
// the uploaded file overwrites it.
FileUpload1.SaveAs(savePath);

// Notify the user that their file was successfully uploaded.
UploadStatusLabel.Text = "Your file was uploaded successfully.";
}
else
{
// Notify the user why their file was not uploaded.
UploadStatusLabel.Text = "Your file was not uploaded because " +
"it does not have a .doc or .xls extension.";
}

}

}


برای حجم فایل:


protected void UploadButton_Click(object sender, EventArgs e)
{
// Specify the path on the server to
// save the uploaded file to.
string savePath = @"c:\temp\uploads\";

// Before attempting to save the file, verify
// that the FileUpload control contains a file.
if (FileUpload1.HasFile)
{
// Get the size in bytes of the file to upload.
int fileSize = FileUpload1.PostedFile.ContentLength;

// Allow only files less than 2,100,000 bytes (approximately 2 MB) to be uploaded.
if (fileSize < 2100000)
{

// Append the name of the uploaded file to the path.
savePath += Server.HtmlEncode(FileUpload1.FileName);

// Call the SaveAs method to save the
// uploaded file to the specified path.
// This example does not perform all
// the necessary error checking.
// If a file with the same name
// already exists in the specified path,
// the uploaded file overwrites it.
FileUpload1.SaveAs(savePath);

// Notify the user that the file was uploaded successfully.
UploadStatusLabel.Text = "Your file was uploaded successfully.";
}
else
{
// Notify the user why their file was not uploaded.
UploadStatusLabel.Text = "Your file was not uploaded because " +
"it exceeds the 2 MB size limit.";
}
}
else
{
// Notify the user that a file was not uploaded.
UploadStatusLabel.Text = "You did not specify a file to upload.";
}
}


منبع: MSDN
http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.fileupload.aspx

sm
سه شنبه 13 آذر 1386, 14:04 عصر
ممنون دوست عزیز
اصل سوال من این بود که چطوری میشه فهمید که حتما فایل با WORD 2003 آماده شدن باشه؟

ممنون از لطف دوستان
موفق باشید

sm
سه شنبه 13 آذر 1386, 23:12 عصر
فکر کنم اگه بشه Header فایل رو باز کرد و خواند مشکل حل بشه!
کسی راه حلی داره ؟

ممنون

sm
جمعه 16 آذر 1386, 14:13 عصر
دوستان توی این زمینه تجربه ای دارن ؟
آیا با خوندن Header میشه کاری کرد ؟ چطوری میشه Header رو خوند ؟

ممنون

mahdi_farhani
جمعه 16 آذر 1386, 19:46 عصر
به نظر من اگر به بایت تبدیل بشه ، میتوینی با یه مقایسه ساده به فهمی که ه تفاوت هایی باهم داره .
به این شکل که با Word 2007 یک فایل را دو باره Save کن ، یه بار با فرمت 2003 و یه بار با یه فرمت دیگه مثلاً 2007 و برای مطمئن شدن میتونی با فرمت 2001 هم Save کنی.
( بدون تغییر دادن در متن و تنظیمات فایل ) .
حالا اگر فایل را باینری بخونی میتونی بفهمی که در کجاها فایلها با هم تفاوت دارند .
این کارو رو دو سه بار و امتحان کن ،،،،،
البته اینم بگم که با سعی و خطا اطلاعات دقیق بدست نمیاری ولی فعلاً کارتو راه میندازه ، ببخشید سرم شلوغه وگرنه خودم برات اینکارو میکردم .
موفق باشید

someCoder
جمعه 16 آذر 1386, 20:23 عصر
اگر حوصله داری کامل بخونی که اینو بخون: http://sc.openoffice.org/compdocfileformat.pdf
اگر حوصله نداری، اینو بخون: http://filext.com/file-extension/doc
اگر اصلا نمیخوای چیزی بخونی، همین هدر رو چک کن: D0 CF 11 E0 A1 B1 1A E1

sm
شنبه 17 آذر 1386, 10:10 صبح
ممنون دوست عزیز... لطف کردین
میشه یه زحمت دیگه هم بکشین و بگین چطوری میشه با vb.net یه header رو خوند ؟
اینو توی C پیدا کردم ... همینه !؟


HEADER Header;

void ReadHeader(FILE *fp)
{
if (fp != (FILE *)NULL)
{
fread(&Header.Id, sizeof(Header.Id), 1, fp);
fread(&Header.Height, sizeof(Header.Height), 1, fp);
fread(&Header.Width, sizeof(Header.Width), 1, fp);
fread(&Header.Colors, sizeof(Header.Colors), 1, fp);
}
}


ممنون و موفق باشید

someCoder
شنبه 17 آذر 1386, 16:37 عصر
ممنون دوست عزیز... لطف کردین
میشه یه زحمت دیگه هم بکشین و بگین چطوری میشه با vb.net یه header رو خوند ؟
اینو توی C پیدا کردم ... همینه !؟


HEADER Header;

void ReadHeader(FILE *fp)
{
if (fp != (FILE *)NULL)
{
fread(&Header.Id, sizeof(Header.Id), 1, fp);
fread(&Header.Height, sizeof(Header.Height), 1, fp);
fread(&Header.Width, sizeof(Header.Width), 1, fp);
fread(&Header.Colors, sizeof(Header.Colors), 1, fp);
}
}


ممنون و موفق باشید

این مثال که پیدا کردی، برای شرایط خاص بوده. (احتمالا یه جور فایل تصویر مثل BMP)
شما باید 4 بایت اول فایل رو بخونید. برای خوندن از فایل به صورت باینری در VB.NET اینجا رو بخون: http://msdn2.microsoft.com/en-us/library/system.io.binaryreader.aspx