Pregunta

Estoy en mi ingenio en este caso. Tengo una interfaz de usuario que crea y edita documentos almacenados en una biblioteca de documentos de SharePoint. La parte del truco es que necesito permitir que el usuario actualice el documento No hay problema, solo use SPFile.SaveBinary() ¿Correcto?

Esto definitivamente actualiza el contenido del archivo, pero de alguna manera persiste el nombre de archivo anterior y la extensión anterior, este es un problema. Eliminar y volver a admitir el elemento de la lista tampoco es una solución porque la ID del elemento se hace referencia en la URL.

Mi pregunta es ¿cómo puedo actualizar los metadatos de extensión y nombre de archivo del elemento SPFILE?

Hasta ahora, todos mis intentos de uso de la biblioteca de objetos han fallado, he intentado actualizar los campos debajo de ninguno ha tenido éxito. Parece que tiene que haber una manera más fácil de hacer esto.

SPFile file = item.File;
file.Item[SPBuiltInFieldId.FileLeafRef] = resolvedFileName;
file.Item[SPBuiltInFieldId.FileRef] = "/File/" + resolvedFileName;
file.Item[SPBuiltInFieldId.BaseName] = System.IO.Path.GetFileNameWithoutExtension(resolvedFileName);
file.Item["Name"] = System.IO.Path.GetFileNameWithoutExtension(resolvedFileName);
file.SaveBinary(conduitFile);
file.Update();

EDITAR - Aquí está mi solución de trabajo.

SPFile file = item.File;
string resolvedFileName = item.ID.ToString() + "-" + conduitFileName;
item["Title"] = resolvedFileName;
file.SaveBinary(conduitFile);
file.MoveTo(item.ParentList.RootFolder.Url + "/" + resolvedFileName, true);
file.Item["Name"] = resolvedFileName;
file.Update();
¿Fue útil?

Solución

Después de guardar el archivo en la biblioteca, use el MoveTo método y pasar el nombre de archivo modificado en el newUrl parámetro.

Método SpFile.moveto (cadena)
Rápido y fácil: cambiar el nombre del archivo cargado con el modelo de objeto SharePoint a través de un receptor de eventos

Otros consejos

Otra forma que es más simple que usar Moveto es usar el Nombre de base Propiedad del Splistitem. Establecerías esto ejecutando

item["BaseName"] = resolvedFileName; //Whatever you want the new file name to be 
item.Update();

Esto es más fácil que Moveto porque no tiene que preocuparse por la jerarquía de carpetas y no tiene que preocuparse por la extensión del archivo.

Por alguna razón, la propiedad no figura en el Documentación de MSDN, pero parece funcionar bien sin problemas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top