Cách tôi làm của tôi khá nhiều như trên, tôi sẽ cho bạn thấy mã của tôi và cách sử dụng nó với MYSSQL DB ...
Bảng tài liệu trong DB -
int Id (PK), Url chuỗi, Mô tả chuỗi, createdBy, TenancyId DateUploaded
ID mã ở trên, là khóa chính, URL là tên của tệp (có loại tệp ở cuối), mô tả tệp để xuất hiện trên chế độ xem tài liệu, createdBy là người đã tải lên tệp, tenancyId, dateUploaded
Trong chế độ xem, bạn phải xác định mã hóa hoặc nó sẽ không hoạt động chính xác.
@using (Html.BeginForm("Upload", "Document", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div class="input-group">
<label for="file">Upload a document:</label>
<input type="file" name="file" id="file" />
</div>
}
Đoạn mã trên sẽ cung cấp cho bạn nút duyệt, sau đó trong dự án của tôi, tôi có một lớp về cơ bản gọi là IsValidImage, chỉ kiểm tra kích thước tệp theo kích thước tối đa đã chỉ định của bạn, kiểm tra xem đó có phải là tệp IMG không, đây có phải là hàm bool không. Vì vậy, nếu đúng trả về đúng.
public static bool IsValidImage(HttpPostedFileBase file, double maxFileSize, ModelState ms )
{
// make sur the file isnt null.
if( file == null )
return false;
// the param I normally set maxFileSize is 10MB 10 * 1024 * 1024 = 10485760 bytes converted is 10mb
var max = maxFileSize * 1024 * 1024;
// check if the filesize is above our defined MAX size.
if( file.ContentLength > max )
return false;
try
{
// define our allowed image formats
var allowedFormats = new[] { ImageFormat.Jpeg, ImageFormat.Png, ImageFormat.Gif, ImageFormat.Bmp };
// Creates an Image from the specified data stream.
using (var img = Image.FromStream(file.InputStream))
{
// Return true if the image format is allowed
return allowedFormats.Contains(img.RawFormat);
}
}
catch( Exception ex )
{
ms.AddModelError( "", ex.Message );
}
return false;
}
Vì vậy, trong bộ điều khiển:
if (!Code.Picture.IsValidUpload(model.File, 10, true))
{
return View(model);
}
// Set the file name up... Being random guid, and then todays time in ticks. Then add the file extension
// to the end of the file name
var dbPath = Guid.NewGuid().ToString() + DateTime.UtcNow.Ticks + Path.GetExtension(model.File.FileName);
// Combine the two paths together being the location on the server to store it
// then the actual file name and extension.
var path = Path.Combine(Server.MapPath("~/Uploads/Documents/"), dbPath);
// set variable as Parent directory I do this to make sure the path exists if not
// I will create the directory.
var directoryInfo = new FileInfo(path).Directory;
if (directoryInfo != null)
directoryInfo.Create();
// save the document in the combined path.
model.File.SaveAs(path);
// then add the data to the database
_db.Documents.Add(new Document
{
TenancyId = model.SelectedTenancy,
FileUrl = dbPath,
FileDescription = model.Description,
CreatedBy = loggedInAs,
CreatedDate = DateTime.UtcNow,
UpdatedDate = null,
CanTenantView = true
});
_db.SaveChanges();
model.Successfull = true;