Arkadaşlar merhaba.
Delphide yazdığım uygulamanın web tarafı için farklı platformda web arayüzü yapılıyor.
Delphi tarafından servera kullanıcı dosyalar kaydediyor ve bu dosyaları daha sonra webden başkaları girip bakıyor.
Yanlız şöyle bir şey var. Dosya isimlerinin tutulduğu tabloya dosya adı uzantısı dışında web tarafındaki yazılımcı arkadaşımız dosyanın content-type bilgisini de eklememi istiyor.
Bu bilgiyi opendialog componentinde bulamadım. Dosyanın content-type bilgisini nasıl elde edebilirim.
Anladığım kadarıyla sunucu tarafını siz yazdınız.
Eğer öyleyse göndereceğiniz verinin tipini aşağıdaki gibi belirleyebilirsiniz.
[
attachment=2268]
Örneğin
Response.ContentType := 'multipart/form-data';
(12-01-2023, Saat: 14:15)RAD Coder Adlı Kullanıcıdan Alıntı: [ -> ]Anladığım kadarıyla sunucu tarafını siz yazdınız.
Eğer öyleyse göndereceğiniz verinin tipini aşağıdaki gibi belirleyebilirsiniz.
Örneğin
Response.ContentType := 'multipart/form-data';
Sunucu tarafını ben yazmadım. Aslında bir sunucuda yok.
Web sayfası direkt sql e bağlanabiliyor. Sql server va IIS sunucusu aynı lokasyondalar.
Benim yazdığım masa üstü programı direkt sql e bağlanıyor. Arada herhangi bir sunucu vs yok.
Kullanıcının seçtiği dosyanın content type nı bulmam gerekiyor.
Merhaba
Kullanıcıların gönderdiği dosya tiplerinde bir standart var mıdır?
En azından text, application, image, audio, video vb. temel tipleri belli midir?
Eğer cevabınız evet ise spesifik olarak sadece dosya uzantısı yeterli geliyorsa temel tipiniz yazıp slash koyup yanına yıldız koymanız kafidir.
text/*
audio/*
video/*
gibisinden.
Ama jpeg, png vb detay lazım geliyorsa ve uzantısı da sizin için yeterli değilse emin olmak için binary header okuyup dosya tipi şablonunu kontrol etmek isteyebilirsiniz.
İnternetten bu tip listesini bulabilirsiniz. Web arayüzü yapan arkadaşınıza tam olarak ne istediğini sorarsanız zaten cevabı vetecektir. Çünkü bu mime type ne için kullanacağını (önizleme, player, thumbnail oluşturma, icon belirleme vb) ne kadar derin bir detay gereğini ancak o bilir ve söyler.
İlk mesajınızı okuduğumda HTTP üzerinden dosya gönderirken sorun yaşadığınızı düşündüm. Fakat daha sonraki mesajınızda yanlış anlamadıysam, server 'a dosya paylaşımı yapar gibi kopyama yapıyor ardından bu dosyanın adını SQL Server 'a yazıyorsunuz. Bu durumda Muharrem Bey 'in mesajında belirtiği gibi dosya uzantısı üzerinden Mime Types tablosunu kullanarak ilgili uzantının MIME karşılığını SQL Server daki tablo alanına yazacaksınız. Bu, sunucudan daha çok istemci taraf için gereklidir aslında. Ancak bu şekilde web server 'dan talep edilen sayfanın web tarayıcılar tarafından nasıl yorumlanacağı belirlenebilir. Web sunucudan talep edilen .pdf uzantılı bir dosyanın ekseriyetle direk görüntüleme modunda açılması gibi. MIME tablosunu
Mozilla 'dan temin edebilirsiniz.
(13-01-2023, Saat: 12:21)delphi.developer Adlı Kullanıcıdan Alıntı: [ -> ]İlk mesajınızı okuduğumda HTTP üzerinden dosya gönderirken sorun yaşadığınızı düşündüm. Fakat daha sonraki mesajınızda yanlış anlamadıysam, server 'a dosya paylaşımı yapar gibi kopyama yapıyor ardından bu dosyanın adını SQL Server 'a yazıyorsunuz. Bu durumda Muharrem Bey 'in mesajında belirtiği gibi dosya uzantısı üzerinden Mime Types tablosunu kullanarak ilgili uzantının MIME karşılığını SQL Server daki tablo alanına yazacaksınız. Bu, sunucudan daha çok istemci taraf için gereklidir aslında. Ancak bu şekilde web server 'dan talep edilen sayfanın web tarayıcılar tarafından nasıl yorumlanacağı belirlenebilir. Web sunucudan talep edilen .pdf uzantılı bir dosyanın ekseriyetle direk görüntüleme modunda açılması gibi. MIME tablosunu Mozilla 'dan temin edebilirsiniz.
Hocalarım yorumlarınız için çok teşekkür ederim. Mozilladan bu listeyi indirip bi tabloya bastım. Dosyanın uzantısına göre bu tablodan search edip ilgili content type buluyorum ve bunu kullanıyorum. Mükemmel çalıştı.
@
tuna problemini çözmüş ama başkalarının işine yarayabilir...
Delphi 10.2 ile birlikte gelen
TMimeTypes kullanılabilir:
uses System.Net.Mime;
procedure TForm2.Button1Click(Sender: TObject);
var
mTypes: TMimeTypes;
aType: string;
aKind: TMimeTypes.TKind;
begin
if OpenDialog1.Execute then
begin
mTypes := TMimeTypes.Create;
try
mTypes.AddDefTypes; // varsayılan olarak tanımlanmışları kullanmak için
mTypes.AddOSTypes; // işletim sisteminden almak için
if mTypes.GetFileInfo(OpenDialog1.FileName, aType, aKind) then
ShowMessage(aType);
finally
mTypes.Free;
end;
end;
end;
(18-01-2023, Saat: 19:14)SimaWB Adlı Kullanıcıdan Alıntı: [ -> ]@tuna problemini çözmüş ama başkalarının işine yarayabilir...
Delphi 10.2 ile birlikte gelen TMimeTypes kullanılabilir:
uses System.Net.Mime;
procedure TForm2.Button1Click(Sender: TObject);
var
mTypes: TMimeTypes;
aType: string;
aKind: TMimeTypes.TKind;
begin
if OpenDialog1.Execute then
begin
mTypes := TMimeTypes.Create;
mTypes.AddDefTypes; // varsayılan olarak tanımlanmışları kullanmak için
mTypes.AddOSTypes; // işletim sisteminden almak için
try
if mTypes.GetFileInfo(OpenDialog1.FileName, aType, aKind) then
ShowMessage(aType);
finally
mTypes.Free;
end;
end;
end;
Çok teşekkürler hocam. Bu çok daha iyimiş. Deneme yapıp kodu buna çeviricem. Her dosya ekleme işleminde ekstra sql sorgusu yapmaktan kurtarıyor.