diff --git a/src/main/java/it/inaf/ia2/transfer/controller/PutFileController.java b/src/main/java/it/inaf/ia2/transfer/controller/PutFileController.java
index 1c9c8f6f18f9d05a124301cfb3588af00460cbb4..2bc9e79179ddc900a3c00df48d5574ce1f257d85 100644
--- a/src/main/java/it/inaf/ia2/transfer/controller/PutFileController.java
+++ b/src/main/java/it/inaf/ia2/transfer/controller/PutFileController.java
@@ -14,6 +14,7 @@ import java.security.NoSuchAlgorithmException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
+import javax.servlet.http.HttpServletRequest;
 import javax.xml.bind.DatatypeConverter;
 import net.ivoa.xml.uws.v1.ExecutionPhase;
 import org.slf4j.Logger;
@@ -38,42 +39,43 @@ public class PutFileController extends FileController {
 
     @Autowired
     private JobDAO jobDAO;
-    
+
     @Autowired
     private ListOfFilesDAO listOfFilesDAO;
 
     @PutMapping("/**")
     public ResponseEntity<?> putFile(@RequestHeader(value = HttpHeaders.CONTENT_ENCODING, required = false) String contentEncoding,
-            @RequestParam("file") MultipartFile file,
-            @RequestParam(value = "jobid", required = false) String jobId) throws IOException, NoSuchAlgorithmException {
+            @RequestParam(value = "file", required = false) MultipartFile file,
+            @RequestParam(value = "jobid", required = false) String jobId,
+            HttpServletRequest request) throws IOException, NoSuchAlgorithmException {
 
-        String path = getPath();        
+        String path = getPath();
 
         if (jobId == null) {
             LOG.debug("putFile called for path {}", path);
         } else {
             LOG.debug("putFile called for path {} with jobId {}", path, jobId);
-                       
-            if(!jobDAO.isJobExisting(jobId))
-            {
-                return new ResponseEntity<>("Job "+jobId+ " not found", NOT_FOUND);
+
+            if (!jobDAO.isJobExisting(jobId)) {
+                return new ResponseEntity<>("Job " + jobId + " not found", NOT_FOUND);
             }
         }
 
         Optional<FileInfo> optFileInfo = fileDAO.getFileInfo(path);
 
         if (optFileInfo.isPresent()) {
-            try (InputStream in = file.getInputStream()) {
+            try (InputStream in = file != null ? file.getInputStream() : request.getInputStream()) {
                 FileInfo fileInfo = optFileInfo.get();
 
                 if (fileInfo.getAcceptViews() != null && fileInfo.getAcceptViews().contains("urn:list-of-files")) {
                     storeListOfFiles(fileInfo, in);
                 } else {
-                    fileInfo.setContentType(file.getContentType());
+                    if (file != null) {
+                        fileInfo.setContentType(file.getContentType());
+                    }
                     fileInfo.setContentEncoding(contentEncoding);
                     storeGenericFile(fileInfo, in, jobId);
                 }
-
             }
             return ResponseEntity.ok().build();
         } else {
@@ -120,10 +122,15 @@ public class PutFileController extends FileController {
         }
 
         try {
-            if(jobId != null){
+            if (jobId != null) {
                 fileDAO.setBusy(fileInfo.getNodeId(), true);
             }
             Files.copy(is, file.toPath());
+
+            if (fileInfo.getContentType() == null) {
+                fileInfo.setContentType(Files.probeContentType(file.toPath()));
+            }
+
             Long fileSize = Files.size(file.toPath());
             String md5Checksum = makeMD5Checksum(file);
 
@@ -137,13 +144,13 @@ public class PutFileController extends FileController {
             }
 
         } catch (IOException | NoSuchAlgorithmException ex) {
-            if (jobId != null) {                
+            if (jobId != null) {
                 jobDAO.updateJobPhase(ExecutionPhase.ERROR, jobId);
             }
             throw ex;
         } finally {
-            if(jobId != null){
-            fileDAO.setBusy(fileInfo.getNodeId(), false);
+            if (jobId != null) {
+                fileDAO.setBusy(fileInfo.getNodeId(), false);
             }
         }
     }