3

Multipart/form-data submit through javascript in Play Framework

 3 years ago
source link: https://blog.knoldus.com/multipartform-data-submit-through-javascript-in-play-framework/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Multipart/form-data submit through javascript in Play Framework

Reading Time: 2 minutes

Normally when we submit any multi-part form in Play Framework that time in the controller have to mention redirection action which  refresh the whole page and it gives an extra load on the network.

It is possible to submit that form with the help of Ajax. It makes easy to submit your form and help to refresh only that particular section where you want to reflect the changes.

1.  We create a multi-part form for uploading the file and some other information.

<form id="profileForm" enctype="multipart/form-data">
<input type="file" name="fileUpload">
<input type="submit" value="Upload" id="ajaxCallUpload">
</form>

2. We develop an Ajax call for submitting form we use  FormData. The FormData object lets you compile a set of key/value pairs to send using XMLHttpRequest. It is primarily intended for use in sending form data, but can be used independently from forms in order to transmit keyed data.

When we call that Ajax call than in the FormData we passed the form_ID so that it makes its object.

We define some important things like –

1. type of call,

2. url on which we have to send data,

3. headers,

4. dataType it can be json,

5. processData it could be false or true,

6. contentType it can be false or application/json ,

7. data we pass that data which we find from the form.

We also mention its success where mention what we have to do when call will be success and error where we mention what we have to do when call will be failed.

$("#ajaxCallUpload").click(function (e) {
var formData = new FormData($("#profileForm")[0]);
e.preventDefault();
$.ajax({
type: "POST"
url: '/upload',
headers: { 'IsAjax': 'true' },
dataType: "json",
processData: false,
contentType: false,
data: formData,
success: function (result) {
onSuccessUpload(data);
},
error: function (error) {
onErrorUpload(error)
}
});
});
var onSuccessUpload = function (result) {
if(result == "File uploaded"){
alert("file uploaded successfully.")
}else{
alert("file not uploaded. Try again !!!")
}
}
var onErrorUpdateProfile = function (error) {
alert("Oops !! Something went wrong.")
}

3. Define Post request in routes for call the action in controller.

POST  /upload  @controllers.UserController.uploadFile

4. Define an action in the UserController.

val uploadService: UploadService

def uploadFile = ScuredAction.async { implicit request =>
val temporaryFile: Option[MultipartFormData[TemporaryFile]] = request.body.asMultipartFormData
val result = uploadService.uploadData(temporaryFile)
Ok(result)
}

5.  Create a service which take your data and saved it.

def uploadData(requestedData: Option[MultipartFormData[TemporaryFile]]): String = {
log.error("Called uploadFile function" + request)
requestedData foreach { fileData =>
fileData.file("file").map {image =>
import java.io.File
val filename = image.filename
val contentType = picture.contentType
log.error("File name : $filename, content type : $contentType")
picture.ref.moveTo(new File("tmp/$filename"))
"File uploaded"
}.getOrElse {
"Missing file"
}

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK