I want to upload file from website portal. how to do that using frappe.handler.uploadfile() or any other alternative need help?
maybe this can help you:
This code assumes you are uploading files to Project DocType from web-view. Also includes multi-file upload with drag and drop on “choose files” button. Thanks @gvrvnk
HTML file in www : Include the script in the script tag or include it with jinja.
{% block header %}
<h1>{{ doc.project_name }}</h1>
<input type="hidden" id="projname" value="{{ doc.project_name }}">
{% endblock %}
<form id="frmFileUp">
<input type="file" id="select_files" multiple>
</form>
<button id="btn_upload">Upload</button>
<script type="text/javascript">
frappe.ready(function() {
var $form = $("form[id='frmFileUp']");
$form.on("change", "[type='file']", function() {
var $input = $(this);
var input = $input.get(0);
if(input.files.length) {
input.filedata = { "files_data" : [] }; //Initialize as json array.
window.file_reading = true;
$.each(input.files, function(key, value) {
setupReader(value, input);
});
window.file_reading = false;
}
});
$("#btn_upload").click(function() {
var projname = $('#projname').val();
var filedata = $('#select_files').prop('filedata');
frappe.call({
method: "app_name.api.attach_file_to_project",
args: {"filedata": filedata, "project_name": projname },
freeze: true,
freeze_message: __("Upload files..."),
callback: function(r){
if(!r.exc) {
frappe.msgprint(__("Files uploaded"));
} else {
frappe.msgprint(__("Files not uploaded. <br /> " + r.exc));
}
}
});
});
});
function setupReader(file, input) {
var name = file.name;
var reader = new FileReader();
reader.onload = function(e) {
input.filedata.files_data.push({
"__file_attachment": 1,
"filename": file.name,
"dataurl": reader.result
})
}
reader.readAsDataURL(file);
}
</script>
app_name/api.py:
import frappe, json
from frappe.utils.file_manager import save_file
@frappe.whitelist()
def attach_file_to_project(filedata, project_name):
if filedata:
fd_json = json.loads(filedata)
fd_list = list(fd_json["files_data"])
for fd in fd_list:
filedoc = save_file(fd["filename"], fd["dataurl"],
"Project", project_name, decode=True, is_private=1)
Idea of setupReader javascript - Looping through files for FileReader, output always contains last value from loop - Stack Overflow
1 Like
This topic was automatically closed 24 hours after the last reply. New replies are no longer allowed.