2009-11-08 25 views
219

Lưu ý:Làm cách nào để đặt giá trị cho đầu vào tệp bằng HTML?

Những câu trả lời & ý kiến ​​dưới đây phản ánh tình trạng của các trình duyệt di sản vào năm 2009. Bây giờ bạn thực sự có thể thiết lập giá trị của phần tử tập tin đầu vào tự động/programatically sử dụng JavaScript và dataTransfer hoặc FileList đối tượng trong 2017.

Xem câu trả lời trong câu hỏi này để biết chi tiết cũng như một bản demo:
How to set file input value programatically (i.e.: when drag-dropping files)?

làm thế nào tôi có thể thiết lập giá trị của điều này?

<input type="file" /> 
+3

Tôi đã làm một tham chiếu và cập nhật (tháng 12 năm 2013) câu trả lời đầy đủ về vấn đề này ở đây: [Ghi và phục hồi lại file Input] (http: // stackoverflow.com/a/20537822/588079) – GitaarLAB

+2

Bản sao có thể có của [Làm thế nào để đặt giá trị đầu vào tệp theo chương trình (ví dụ: khi kéo-thả tệp)?] (https://stackoverflow.com/questions/47515232/how-to-set- file-input-value-programatically-ie-khi-kéo-thả-files) –

Trả lời

381

Bạn không thể vì lý do bảo mật.

Hãy tưởng tượng:

<form name="foo" method="post" enctype="multipart/form-data"> 
    <input type="file" value="c:/passwords.txt"> 
</form> 
<script>document.foo.submit();</script> 

Bạn không muốn các trang web bạn truy cập để có thể làm được điều này, phải không? =)

+0

Bạn có thể xóa nó không? Nó làm tôi nhớ rằng tên tập tin được nhớ mỗi khi tôi truy cập lại. Pelase xem http://stackoverflow.com/questions/41807471/can-i-reset-the-seletced-file-name-of-an-html-5-file-selector – Mawg

+1

Tôi hiểu vấn đề bảo mật, nhưng không nên trình duyệt có thể phân biệt giữa filepath địa phương nguy hiểm và thứ gì đó vô hại hơn như dataUrl không? Có lẽ đó là một giấc mơ đường ống. – cowlinator

+3

Điều gì về chức năng kéo thả n, không có cách nào để đặt tập tin đó vào trường nhập? – Vedmant

26

Bạn không thể. Và đó là một biện pháp an ninh. Hãy tưởng tượng nếu ai đó viết một JS đặt giá trị đầu vào tệp vào một số tệp dữ liệu nhạy cảm?

100

Bạn không thể.

Cách duy nhất để đặt giá trị của đầu vào tệp là do người dùng chọn tệp.

Điều này được thực hiện vì lý do bảo mật. Nếu không, bạn sẽ có thể tạo một Javascript tự động tải lên một tệp cụ thể từ máy khách.

41

Không phải là câu trả lời cho câu hỏi của bạn (mà những người khác đã trả lời), nhưng nếu bạn muốn có một số chức năng chỉnh sửa của một lĩnh vực tập tin tải lên, những gì bạn có thể muốn làm là:

  • hiển thị các giá trị hiện tại của trường này bằng cách chỉ in tên tệp hoặc URL, liên kết có thể nhấp để tải xuống hoặc nếu đó là hình ảnh: chỉ hiển thị hình ảnh đó, có thể là hình thu nhỏ
  • thẻ <input> để tải lên tệp mới
  • hộp kiểm đã chọn, xóa tệp hiện được tải lên. lưu ý rằng không có cách nào để tải lên tệp 'trống', vì vậy bạn cần một cái gì đó như thế này để xóa giá trị của trường
-3

Thực ra chúng ta có thể làm điều đó. chúng tôi có thể đặt giá trị tệp mặc định bằng cách sử dụng điều khiển webbrowser trong C# bằng cách sử dụng LibraryToMultipartPostData.Chúng tôi phải tải xuống và bao gồm Thư viện này trong dự án của chúng tôi. Webbrowser cho phép người dùng điều hướng các trang Web bên trong biểu mẫu. Khi trang web được tải, tập lệnh bên trong webBrowser1_DocumentCompleted sẽ được thực thi. Vì vậy,

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
    { 
     FormToMultipartPostData postData = 
      new FormToMultipartPostData(webBrowser1, form); 
     postData.SetFile("fileField", @"C:\windows\win.ini"); 
     postData.Submit(); 
    } 

Tham khảo liên kết dưới đây để tải xuống và tham khảo đầy đủ.

https://www.codeproject.com/Articles/28917/Setting-a-file-to-upload-inside-the-WebBrowser-com

+0

Liên kết đến giải pháp được chào đón, nhưng hãy đảm bảo câu trả lời của bạn là hữu ích mà không có nó: [thêm bối cảnh xung quanh liên kết] (// meta.stackexchange.com/a/8259/165483) để người dùng đồng nghiệp của bạn sẽ có một số ý tưởng về nó là gì và tại sao nó ở đó, sau đó trích dẫn phần có liên quan nhất của trang bạn đang liên kết đến trong trường hợp trang đích không có sẵn. [Câu trả lời có nhiều hơn một liên kết có thể bị xóa.] (// stackoverflow.com/help/deleted-answers) –

+0

Xem thêm [Cách đặt giá trị đầu vào tệp theo chương trình (ví dụ: khi kéo-thả tệp)?] (https://stackoverflow.com/q/47515232/584192) –

Các vấn đề liên quan