rename file on download

A

Aaron

On my website I have a dynamic link(aspx) to this file 0AX120S.jpg(privacy
protection). When a visitor clicks on the link I want them to see
my_vacation_pic.jpg (fetch realname from database) is this possible with
ASP.NET(C#)?

Thanks

Aaron
 
T

Tampa.NET Koder

Yeah of course,

0AX120S could be your primary key in your table and it would include the
link for the real filename in another column. Use SQL to query the filename
from the database.
 
A

Aaron

But how do I output the file as my_vacation_pic.jpg when the actual filename
stored on the server is 0AX120S.jpg

1)the user clicks this link
http://mywebsite.com/download.aspx?file=003
2)download.aspx fetch index 003 from database
3)outputs 0AX120S.jpg as my_vacation_pic.jpg
4)the user only knows that hes downloading my_vacation_pic.jpg

Why do I want to do this? well, the user can upload files to my server and i
want them to be downloadable only through the download.aspx script. It also
helps protect the server against malicious scripts that people upload.

Thanks
 
T

Tampa.NET Koder

Well,
If you display the image to them and they right click on it and let say,
view the properties. Thie image 0AX120S.jpg will not display. They will
see this as the image source http://mywebsite.com/download.aspx?file=003.
If they choose to save your image to disk, then I think they will be able to
call it whatever you want. Hope this helps, otherwise see if anyone else
have a take on this
 
A

Aaron

Thanks but I not just dealing with image files, also zip, rar, pdf..., that
was just an example.
 
A

Aaron

With your method someone can still figure out the actual location by using a
packet sniffer. It just redirects to that location.
ie. http://mywebsite.com/download.aspx?file=003 redirects to
http://mywebsite.com/uploadedFiles/0AX120S.zip

I want this
http://mywebsite.com/download.aspx?file=003 gets
http://mywebsite.com/uploadedFiles/0AX120S.zip outputs as
http://mywebsite.com/uploadedFiles/my_vacation_pic.zip


If they type http://mywebsite.com/uploadedFiles/my_vacation_pic.zip in their
browser they will get a 404 error. There's no way for them knowing
http://mywebsite.com/uploadedFiles/0AX120S.zip because that address is not
sent to their computer.

Is this possible??
 
I

IPGrunt

Thanks but I not just dealing with image files, also zip, rar, pdf..., that
was just an example.

Scott Allen said:
Hi Aaron:

One way to do this is to use set the src attribute of an image tag to
an ASPX page, and have the ASPX page determine the correct filename to
use and write the jpeg contents back into the response.

Here is an example:
http://msdn.microsoft.com/msdnmag/issues/04/04/CuttingEdge/default.as
px
Hope this helps,

I hate it when clients do that!

Is it fun to change the requirement after the problem is solved? Why
not state the problem clearly next time so the answer fits the
problem by design instead of by accident?

Actually, with a little imagination this particular solution can be
adapted to any of the file types mentioned, or to solve it in
general, you could send an anonymous stream to the response object
based on the input file: read from source file, output to stream.

-- ipgrunt
 
N

Nick Malik [Microsoft]

This exchange has been fun to watch!

Hi Aaron,

Clicking a link sends a request to the web server. The response that comes
back has a small set of HTTP headers associated with it.
In these headers, you can specify the filename that you want the browser to
use when opening the file.

Content-Type = application/download
Content-Disposition = attachment; filename=my_vacation_pic.jpg

This will allow the user to save the file by the name you provide.

You simply have to code the headers.

I'm not clear from your messages if you are storing the files in the
database or just their names. If you are storing just their names, then you
will want your ASPX page to set the HTTP headers first, then read the file
into memory, encode to Base64, and stream it into the Response object.

The browser will do the rest.

--
--- Nick Malik [Microsoft]
MCSD, CFPS, Certified Scrummaster
http://blogs.msdn.com/nickmalik

Disclaimer: Opinions expressed in this forum are my own, and not
representative of my employer.
I do not answer questions on behalf of my employer. I'm just a
programmer helping programmers.
 
A

Aaron

All the uploaded files will be stored in a folder. Do you have an example on
how to set response headers in asp.net? I did a search the results only show
me how to get the request headers.
Also is this method compatible with older browsers? IE4 NS4?

Thanks,
Aaron
 
A

Aaron

Thanks for the article. I'm experimenting with it right now. Don't know if
it work for my case. Since the files requested are not aspx files,
(zip,jpg,gif,pdf...)

Is global.asax responsible for all reqeusts made to the webapp or just the
asp.net ones?
 
N

Nick Malik [Microsoft]

This works with IE4.01. This will not work with IE5.0, but it will work
with IE5.1 and higher. Stats prove that no one is using IE4 or NS4 anymore.
(If that's your market, then you are already out of business). I haven't
tested with Opera and Firefox, but that shouldn't be difficult to test with.
Word on the street is that those browsers are pretty darn good, so I
wouldn't expect any issues.

You need HTTPResponse.AppendHeader
http://msdn.microsoft.com/library/e...stemwebhttpresponseclassappendheadertopic.asp

An article that can help
http://aspalliance.com/articleViewer.aspx?aId=259&pId=-1

I picked these off of google

--
--- Nick Malik [Microsoft]
MCSD, CFPS, Certified Scrummaster
http://blogs.msdn.com/nickmalik

Disclaimer: Opinions expressed in this forum are my own, and not
representative of my employer.
I do not answer questions on behalf of my employer. I'm just a
programmer helping programmers.
 
C

Cor Ligthert

Aaron,

The way that I think that I would probably do your problem.
I would create in my database from every picture a thumbnail that I would
present on a imagebutton on my page

I would set reference number in a tag and that with the used paths in a
dataset that I would store in a session.

When the button is clicked I would get the image and translate that to a
bitmap.

That bitmap I would send using the response.redirect(bitmap)

Than the user would never know the original path.

Just an idea

Cor
 
I

Inge Henriksen

You can, but it requires you to add new Application Mappings in IIS, then
you must program a DLL to do the actual job for you, in your case the DLL
would probably look up the file name from the database, and then HTTP
redirect the user to a download page where the user will start to download
the file.

-Inge
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,576
Members
45,054
Latest member
LucyCarper

Latest Threads

Top