Set a string to a fileupload as it's filename - asp.net

i have an update form for some of my data, if user entered an url for my fileupload in database,
i want to show this url in fileupload as it's filename in my update form,
actually i want have a code like this :
FileUpload1.FileName = "My Path";
of course i know fileName in a readOnly property,
could u please help me?

Its a bad idea since user might not have file in same location or he might have completely deleted it or he may browsing from other machine that results in invalid functionality. However, the file upload value can be set from javascript. If you really intend to do that, store the path in hidden field and in body onload event set the fileupload value to the hidden field value.

Related

Dynamic destination with AjaxFileUpload

I am using an AjaxFileUpload for multiple file upload. It is working, but I want to change the destination with the value in a textbox. The code is below which is in the AjaxFileUpload1_onUploadComplete method:
string myDir= myDirTextBox.Text.Trim();
AjaxFileUpload1.SaveAs(Server.MapPath("../allarticles/"+ myDir+"/"+e.FileName));
I debug the project and write a name in the myDirTextBox. Then when I click the Upload File button the value of this textbox is always null. That's why I can't change the destination dynamically.
I have read this article but it is not clear: upload multiple files with ajaxFileUpload with different file ids
What is the problem and how can I solve it?
When server event occurs the page goes through complete page lifecycle.
That means your code deals with new, uninitialized version of a page which is not related in any way with the page you see in a browser.
To save the value of a textbox and utilize it later you need to write some code to store this value between page requests. This can be simple JavaScript code attached to Upload button, that posts textbox value with AJAX to a server. Server, in turn, will store this value in session or another persistent storage.

Is there a way to get an httppostedfile WITHOUT using the fileuplaod control?

I have a class that needs an System.Web.HttpPostedFile object.
In most cases this is obtained when the user uploads a pic. However, in cases where they don't I need to pass a default image to the class.
But how do I populate the HttpPostedFile property if I'm not using the fileupload control?
You cannot select a file from the users machine for them. The ONLY way for a file to be selected and transferred from a client computer to your web app is if you use the input type="file" tag (which is what the file control wraps) and let THEM select a file.
What you CAN do is detect on post back whether they transferred a file to you or not. If they haven't then you can use a file local to the SERVER to use instead; however, this isn't going to come through the posted file area.
As far as reasons why not: security, plain and simple.

asp:upload postedfile lost during postback

I am using an asp:upload control to upload an image and am using the postedfile property to insert the path to the database. In my form I have a dropdown with autopostback=true where the user can select a topic to populate a checkbox list of categories. During that postback, the postedfile value is being lost and after a little research I have discovered that the posted file value is not maintained in viewstate for security reasons. Has anybody else found out how to get around this?
That's how it works. The value of a intput type="file" is never used on parsing an HTML page. That's a huge security risk, so no modern browser will allow them to 'retain' values. So in ASP.NET, every postback "loses" the value.
On any postback with a file in the input control, be sure to save the value somewhere you can get to it later.
Or don't design a form that uses a file upload to have multiple postbacks. Perhaps consider wrapping your drop down list and associated control in an UpdatePanel so the file upload doesn't get cleared.
The value attribute of an input file element simply cannot be set by anything except user interaction. That's the way it works, and that will not change due to security concerns. That said, your solution is to eliminate the postback.
I would try to load the checkbox list via JavaScript/AJAX, possibly saving the values of the checkbox list to a hidden field so I can retain the values on a postback.
This may not be ideal, but if you want to do this all with no postbacks, at some point your going to have to use JavaScript.
You could try the AsynchFileUpload control in the AjaxControlToolkit, but there isn't a workaround for the standard fileupload unless you save the file to a temporary folder and load a file list from that temp folder.

Page.ParseControl to find HTMLImage

I have a richtext textbox on a webpage that will be used to create email templates. This textbox returns HTML as a string. I need to get the source of all the images from the HTML so that the images can be stored in the database. Once the HTML is returned the images have already been loaded to the server and the new path has been used as the source of the image.
I would like to parse the controls, loop through the controls as seen below, find the images save to the database and change the source to a new value.
However when the string is parsed, it always returns one literal control unless there is a runat server attribute assigned to the tag. If the run at server is present it correctly identifies the control as an HTMLImage control.
Is there away to get the page to parse all the controls regardless of if they are server controls?
Dim s As String = "<P><IMG src=""http://localhost/MessageImages/14699666.jpg""></P>"
Dim cnts As Control = Page.ParseControl(s)
For Each c As Control In cnts.Controls
If TypeOf c Is System.Web.UI.HtmlControls.HtmlImage Then
Dim src As String = CType(c, HtmlImage).Src
'TODO: Save image to database
'TODO: Change source
End If
Next
It sounds to me like you'd be better of using something like the HTML Agility Pack to parse the raw HTML from the editor instead. As it works with the pure HTML you don't need to worry about whether controls are server controls or HTML controls etc.

Maintaining ViewState for FileUpload Control

I am creating FileUpload controls at run time. When I click a LinkButton a new FileUpload control is generated.
Now suppose I have selected a file from a FileUpload control and I click the LinkButton. The previous FileUpload control loses its path. However, I'm maintaining the ViewState of each control that I create at runtime by using this line:
f1.enableviewstate = true;
How do I maintain the selected file for a FileUpload control?
Steps
user selects a file
user click LinkButton (issues a postback that adds additional file uploading control)
server side should get the file on postback and store it somewhere (anywhere)
replace first <input type=file> with something like Label and check mark icon (to tell user the file has already been uploaded (or even a read-only text box with disabled browse button to fake file upload control - however you won't be able to display correct file path in it)
user is presented with a new form that has new empty file upload control in showing already uploaded files.
For security reasons you can't manipulate <input type=file> in any way shape or form.
Hack approach
If I understood you correctly your link button adds additional file upload controls to your page. Instead I'd create a sufficient number of upload controls the first time and display just one. Others would be hidden by CSS. After user clicks the LinkButton, it would however have only client-side Javascript functionality that would reveal additional control. And another... and another... and another... until maximum is reached.
Complex approach
You could however make it in a different way by using more Javascript and make it more Web 2.0-ish. You should however upload those files via <iframe>
as some of the others mentioned, you cannot preserve the viewstate of a FileUpload due to security issues.
What you could do is to simply add a Label just below the FileUpload. When the user clicks on the linkbutton in order to generate a new FileUpload, a postback will be fired where you could check whether the FileUpload controls present on the page have some value (i.e. the user already selected a file to upload), and if so, you could directly start to upload that file and show the result (the path or filename) on the label, just that the user knows he has added that file already. You could also hide the fileupload and additionally add a remove link to again remove the uploaded file (similar approach as Gmail does).
Hope this helped.
Juri
You can't pre-select a file path in the file upload input tag (security related - the user must select the file), so .Net is not able to populate the value from viewstate.
Consider if you really need to at it at runtime?
If you really need to at runtime; Don't forget to add it to the closest container's Controls property. Doing this makes sure it's state is serialized to the ViewState.
Hope this helps...
as per me there is no way to persist viewstate of fileupload in asps.net.
u can store it's value in hidden field,session etc file u can not be able to assign that value to again file upload because it is read only

Resources