Download Filestream Data From SQL To Client System?
May 21, 2010
I am storing files in SQL using FileStream from a ASP .NET app. I am also storing the filetypes.
I want to allow users to download (and open these files) to view them. I see a lot of code samples on how I can read data out of FileStream, and put it into a buffer in memory. I guess from there, I can write it out to a file.
But since the data is already in a file (SQL "Select myFileStreamColumn.FilePath()" returns it's location) can't I somehow put up a Save As... dialog for the user, and let them download it directly from the SQL storage area to their local PC?
Do I have to read the data out of SQL, write it out to a file, and then give them a Save As... dialog pointing to that new file?
I have a class DocumentGenerator which wraps a MemoryStream. So I have implemented IDisposable on the class.
I can't see how/where I can possibly dispose it though.
This is my current code, which performs a file download in MVC:
using (DocumentGenerator dg = DocumentGenerator.OpenTemplate(path)) { /* some document manipulation with the DocumentGenerator goes here ...*/ return File(dg.GetDocumentStream(), "text/plain", filename); }
This errors as the stream is closed/disposed before the controller has finished with it. How can I make sure my resources are properly disposed in this situation?
EDIT: My implementation of IDisposable at the moment just disposes the MemoryStream. I know it's not a proper implementation, I just used it as a test. Is there something different I could do here to make it work?
public void Dispose() { _ms.Dispose(); _ms = null; }
I've got a vb.net page that when a user clicks a button in a gridview, it copys the file (row seleted) in the gridview as "Label2" from the webserver to the users pc. (We had to setup a lot of security to get it so the webserver could copy to the users pc). I have that all working fine, but now, I'm trying to see if FileStream will then open the file that was just downloaded on the users PC. I'm not familiar with FileStream, and could use a little push in the right direction. (Disclaimer, yes I know downloading the file directly to the pc is a crazy thing to do, but it's a really long story. :-)
For the FileStream portion, I found this sample, but don't quite understand if I can incorporate it into my button click event. Here's the sample [URL]
Getting the following error when browsing .net 2.0 application System.Data.OracleClient requires Oracle client software version 8.1.7 or greater.
I have setup a .net 2.0 application with oracle backend on windows server 2008 R2. I have oracle client 11g installed on the server for the application to talk to the oracle database. This worked well when the .net 2.0 application was hosted on windows server 2003 and oracle client 10g. But when it is hosted on server 2008 with new oracle client it is giving the above error when browsing the page. This error occurs when the connection is opened inside the c# code.
I have a database containing a table with about 700,000 images so I recently enabled Filestream. However, I can't figure out how to render the images.
I have an Imagefield control within a Detailsview which is using an .aspx file to render the image through the DataImageUrlFormatString (which is typical). In my select statements I tried changing the binary field containing the image from objectdata to objectdata.PathName() per the Microsoft documentation but this does not work. I get the red X image box.
I'm trying to do the following in ASP.NET (with c#):
1. On page Load, download an XML file from a different website to the IIS server, in a subdirectory of the application directory called "downloadedFiles"
I know that WebClient.DownloadFile() can download a file, but this only seems to download the file to the client's machine. I am interested in downloading it to the actual IIS server (so that it can be utilized throughout the lifetime of more than one session). Does anyone know how this could be performed?
Specifically, I'm trying to download an XML file from a website (as an example: [URL]) . How could I download that XML file onto my actual IIS server?
How do i download a file from server to the client pc using asp.net, im using c# with vs 2005. I have tried with WebCient but it is downloading on the server itself. I want to download a particular file to the client PC.
I'm trying to define a sqldatasource for writing out SQL Filestream data. For example, I have a SQL table with a column named Data, which is FileStream. The column type is VarBinary(max)
InsertCommand = "INSERT INTO MYTABLE (Data) VALUES (@Data)"
<asp:Parameter Name="Data" Type = ???? What goes here????>
In the code-behind to load the data, I want something like,
e.Command.Parameters("@Data").Value = StringToByteArray("HERE'S THE CONTENTS OF MY FILE")
I have StringToByteArray defined as Encoding.Unicode.GetBytes(String.Empty+inputParameter)
I'm converting a bunch of FOXPRO / FOXWEB apps to ASP.NET.
The underlying DB is still foxpro (for the moment).
I am passing a table to some VB.NET code that I want to have converted to a CSV file and sent back to the client for download. And it works! Sort of ... It works sometimes, but at other times, instead of asking me if I want to download the CSV file, it just spews the file to the browser window.
On the asp side, I am passing the response object, the table and the csv file name.
I have the developers edition of sql server 2008 on my local machine (I have an msdn subscription). I would like to download and use r2 client, which I understand is superior to the standard client) but not the express database. Do I want the "SQL Server 2008 R2 Express with Management Tools " (doesnt sound like what I want) or the "SQL Server 2008 R2 Management Studio Express" (does sound like what I want, and is about 100M smaller, so I assume doesnt load the database). Of course I am assuming that the r2 client connects with no problems to a non-r2 database.
I've problem when I Export my data to Excel and response to Client.
I want :
When Client Downloaded File Excel, On server will delete that file. Current, when Export, on my Server will genaral an Excel File and I call Response.Redirect(fileExcel), Client enable Download that file.
But, If I don't delete that file on server then my server will full by time.Whether any way to download from FileStream Or something the same?
Or any body have an other way to after Client Download then Server delete fileExcel?
Is there anything special you have to do to retrieve Filestream data using a SqlDataSource? I'm using VB and have this as my sqldatasource:
<asp:SqlDataSource ID="SqlDataSourceReadPD" runat="server" etc... SelectCommand="SELECT [PDIPAttachment] FROM [PositionDescriptions] WHERE ([CP_IDString] = @CP_IDString)"> <SelectParameters> <asp:Parameter Name="CP_IDString" Type="String" /> </SelectParameters> </asp:SqlDataSource>
PDIPAttachment is a FILESTREAM column in my table called PositionDescriptions
and this is some of my VB cod:
Dim dv As DataView = DirectCast(SqlDataSourceReadPD.Select(DataSourceSelectArguments.Empty), DataView) Dim dr As DataRowView For Each dr In dv Dim data as Byte() = System.Text.Encoding.ASCII.GetBytes(dr("PDIPAttachment").ToString()) Next
The Filestream data has a PDF file in it, but what I"m getting back in "data" are 13 bytes consisting of: "System.Byte[]".
Assume a simple aspx data entry page in which admin user can upload an image as well as some other data. They are stored in database and the next time admin visits that page to edit record, image data fetched and a preview generated and saved to disk (using GDI+) and the preview is shown in an image control.
This procedure works fine for the first time however if the image changes (a new one uploaded) the next time the page is surfed it shows previously uploaded image. I debugged the application and everything works correct. The new image data is in database and new preview is stored in Temp location however the page shows previous one. If I refresh the page it shows the new image preview. I should mention that preview is always saved to disk with one name (id of each record as the name).
I think that is because of IE and other browsers use client cache instead of loading images each time a page is surfed. I wonder if there is a way to force the client browser to refresh itself so the newly uploaded image is shown without user intervention.
I am using the code below to enable clients to download a .csv file from my server.
The problem I am having is that when the file is saved to the client computer the file name is prefixed and suffixed with an underscore which leads to a file type of .csv_ which is obviously not a recognised file type.
How can I strip the underscores from the file name at the transmit stage?
Dim FileName As String = LstBox1.SelectedItem.ToString Dim FilePath As String = "~/temp" & FileName Response.Clear() Response.ContentType = "text/csv" Response.AddHeader("Content-Disposition", "attachment; filename=" & FileName & "") Response.TransmitFile(FilePath) Response.End()
i want to show info like how much time will be requited to download file in client machine. every client will have different internet speed so how can i detect and show time required to download file in client machine. is it possible in asp.net.
suppose when user click on link or button for downloading file in asp.net then download start.so i just want to know how to detect that the file as been downloaded in client machine.is it possible to track from server side code. because i want to develop a file download sectionfrom where user at a time can download only single file. so in this case when file download starti will just capture client ip and store it in session and so when user click on another link to download another fileat the same when another file is downloading so in this situation i will check file is downloading from this ip and if yesthen i will reject user request and tell him that sorry already a file is downloading so try after when this download willbe over. when file download will be over then i will clear that session and in this way my purpose will be solved andrestric user to downlolad multiple file.this type of things is used in rapidshare,hotfile etc. so i just implement this
My website is allowing the web.config file to be downloaded. However in my C:WINDOWSMicrosoft.NETFrameworkv2.0.50727CONFIGweb.config file I have this line
I was working on an attendance system on ASP.Net where the entire week's dates are calculated by my program based on the current date. I am using DateTime.Today. I was apprehensive to use this as I feel that users can modify this date by merely changing their system clock and mark previous week's attendance.Can DateTime.Today be changed by changing system clock on client side? If yes, is there something else I can use instead of that?