Foren

Importer des medias personnalisés avec des métadonnées par programmation

Pierre Binauld, geändert vor 8 Jahren.

Importer des medias personnalisés avec des métadonnées par programmation

New Member Beiträge: 2 Beitrittsdatum: 07.09.15 Neueste Beiträge
Bonjour,

Pour les besoins de notre application nous avons créé des types de média avec leurs jeux de métadonnées.

Je dois réaliser un flux qui importe des média en renseignant ses métadonnées.

Voici le code que j'ai écris grâce a diverse réponses sur ce forum et qui ne fonctionne pas :


public DLFileEntry upload(File file, User user, Company company, String fileEntryTypeString, String title, String folderName, Map<string, serializable> metadatas) throws MyException {
	FileInputStream is = null;
	try {
	
		this.serviceContext = new ServiceContext();
		this.serviceContext.setUserId(ser.getUserId());
		
		is = new FileInputStream(file);
		
		DLFolder dlFolder = getDLFolder(folderName);
		long groupId = dlFolder.getGroupId();

		DLFileEntryType fileEntryType = null;
		fileEntryType = DLFileEntryTypeLocalServiceUtil.fetchFileEntryType(
				company.getGroup().getGroupId(),
				fileEntryTypeString
		);
	
		//Update Metadata, maybe it is possible to update directly with updateFileEntry or even addFileEntry
		Map<string, fields> fieldsMap = new HashMap<string, fields>();
		if(!metadatas.isEmpty()) {
			List<ddmstructure> ddmStructures = fileEntryType.getDDMStructures();
			DDMStructure ddmStructure = ddmStructures.get(0);
			Fields targetFields = new Fields();
			for (Map.Entry<string, serializable> entry : metadatas.entrySet()) {
				targetFields.put(new Field(entry.getKey(), entry.getValue()));
			}
			fieldsMap.put(ddmStructure.getStructureKey(), targetFields);
		}

		DLFileEntry dlFileEntry = DLFileEntryLocalServiceUtil.addFileEntry(
				user.getUserId(),
				groupId, 
				groupId, 
				dlFolder.getFolderId(),
				file.getName(), 
				MimeTypesUtil.getContentType(file), 
				title, 
				file.getName(), 
				"", 
				fileEntryType.getFileEntryTypeId(), 
				fieldsMap,
				file, 
				is, 
				file.length(), 
				serviceContext
		);
		
		DLFileEntryLocalServiceUtil.updateFileEntry(
				user.getUserId(),
				dlFileEntry.getFileEntryId(), 
				file.getName(),
				MimeTypesUtil.getContentType(file), 
				title, 
				"", 
				"", 
				true, 
				fileEntryType.getFileEntryTypeId(), 
				null, 
				file, 
				is, 
				file.length(),
				serviceContext
		);
		
		return dlFileEntry;
		
	} catch (FileNotFoundException | PortalException | SystemException e) {
		LOG.error(e.getMessage());
		throw new MyException(e);
	} finally {
		try {
			if (null != is) {
				is.close();
			}
		} catch (IOException e) {
			LOG.error(e);
		}
	}
}
</string,></ddmstructure></string,></string,></string,>


Si j’exécute ce code, le fichier est bien importer dans liferay (avec les bonnes métadonnées, il semblerait), par contre je ne pas changé les métadonnées parce que les champs pour les modifier n'apparaissent pas...
Et lorsque j'enregistre ce fichier dans liferay, j'obtient une erreur.

Qu'est ce qui ne va pas dans mon code ?

Merci d'avance !