mirror of
https://github.com/ONLYOFFICE/document-server-integration.git
synced 2026-04-07 14:06:11 +08:00
csharp: check file availability when saving
This commit is contained in:
committed by
Sergey Linnik
parent
1b44c04893
commit
f8aa55143c
@ -130,37 +130,48 @@ namespace OnlineEditorsExample
|
|||||||
|
|
||||||
_Default.VerifySSL();
|
_Default.VerifySSL();
|
||||||
|
|
||||||
var storagePath = _Default.StoragePath(newFileName, userAddress); // get the file path
|
try
|
||||||
var histDir = _Default.HistoryDir(storagePath); // get the path to the history directory
|
|
||||||
if (!Directory.Exists(histDir)) Directory.CreateDirectory(histDir);
|
|
||||||
|
|
||||||
var versionDir = _Default.VersionDir(histDir, _Default.GetFileVersion(histDir)); // get the path to the file version
|
|
||||||
if (!Directory.Exists(versionDir)) Directory.CreateDirectory(versionDir); // if the path doesn't exist, create it
|
|
||||||
|
|
||||||
// get the path to the previous file version and rename the storage path with it
|
|
||||||
File.Copy(_Default.StoragePath(fileName, userAddress), Path.Combine(versionDir, "prev" + curExt));
|
|
||||||
|
|
||||||
DownloadToFile(downloadUri, storagePath); // save file to the storage directory
|
|
||||||
DownloadToFile((string)fileData["changesurl"], Path.Combine(versionDir, "diff.zip")); // save file changes to the diff.zip archive
|
|
||||||
|
|
||||||
var hist = fileData.ContainsKey("changeshistory") ? (string)fileData["changeshistory"] : null;
|
|
||||||
if (string.IsNullOrEmpty(hist) && fileData.ContainsKey("history"))
|
|
||||||
{
|
{
|
||||||
var jss = new JavaScriptSerializer();
|
var bytesFile = DownloadFile(downloadUri); // download document file
|
||||||
hist = jss.Serialize(fileData["history"]);
|
var storagePath = _Default.StoragePath(newFileName, userAddress); // get the file path
|
||||||
}
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(hist))
|
var histDir = _Default.HistoryDir(storagePath); // get the path to the history directory
|
||||||
{
|
if (!Directory.Exists(histDir)) Directory.CreateDirectory(histDir);
|
||||||
File.WriteAllText(Path.Combine(versionDir, "changes.json"), hist); // write the history changes to the changes.json file
|
|
||||||
}
|
|
||||||
|
|
||||||
File.WriteAllText(Path.Combine(versionDir, "key.txt"), (string)fileData["key"]); // write the key value to the key.txt file
|
var versionDir = _Default.VersionDir(histDir, _Default.GetFileVersion(histDir)); // get the path to the file version
|
||||||
|
if (!Directory.Exists(versionDir)) Directory.CreateDirectory(versionDir); // if the path doesn't exist, create it
|
||||||
|
|
||||||
string forcesavePath = _Default.ForcesavePath(newFileName, userAddress, false); // get the path to the forcesaved file version
|
// get the path to the previous file version and rename the storage path with it
|
||||||
|
File.Copy(_Default.StoragePath(fileName, userAddress), Path.Combine(versionDir, "prev" + curExt));
|
||||||
|
|
||||||
|
SaveFile(bytesFile, storagePath);// save document file
|
||||||
|
|
||||||
|
var bytesChanges = DownloadFile((string)fileData["changesurl"]); // download changes file
|
||||||
|
SaveFile(bytesChanges, Path.Combine(versionDir, "diff.zip")); // save file changes to the diff.zip archive
|
||||||
|
|
||||||
|
var hist = fileData.ContainsKey("changeshistory") ? (string)fileData["changeshistory"] : null;
|
||||||
|
if (string.IsNullOrEmpty(hist) && fileData.ContainsKey("history"))
|
||||||
|
{
|
||||||
|
var jss = new JavaScriptSerializer();
|
||||||
|
hist = jss.Serialize(fileData["history"]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(hist))
|
||||||
|
{
|
||||||
|
File.WriteAllText(Path.Combine(versionDir, "changes.json"), hist); // write the history changes to the changes.json file
|
||||||
|
}
|
||||||
|
|
||||||
|
File.WriteAllText(Path.Combine(versionDir, "key.txt"), (string)fileData["key"]); // write the key value to the key.txt file
|
||||||
|
|
||||||
|
string forcesavePath = _Default.ForcesavePath(newFileName, userAddress, false); // get the path to the forcesaved file version
|
||||||
if (!string.IsNullOrEmpty(forcesavePath)) // if the forcesaved file version exists
|
if (!string.IsNullOrEmpty(forcesavePath)) // if the forcesaved file version exists
|
||||||
|
{
|
||||||
|
File.Delete(forcesavePath); // remove it
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
{
|
{
|
||||||
File.Delete(forcesavePath); // remove it
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -205,43 +216,51 @@ namespace OnlineEditorsExample
|
|||||||
|
|
||||||
_Default.VerifySSL();
|
_Default.VerifySSL();
|
||||||
|
|
||||||
string forcesavePath = "";
|
try
|
||||||
Boolean isSubmitForm = fileData["forcesavetype"].ToString().Equals("3"); // SubmitForm
|
|
||||||
|
|
||||||
if (isSubmitForm) // if the form is submitted
|
|
||||||
{
|
{
|
||||||
if (newFileName)
|
var bytesFile = DownloadFile(downloadUri); // download document file
|
||||||
|
string forcesavePath = "";
|
||||||
|
Boolean isSubmitForm = fileData["forcesavetype"].ToString().Equals("3"); // SubmitForm
|
||||||
|
|
||||||
|
if (isSubmitForm) // if the form is submitted
|
||||||
{
|
{
|
||||||
fileName = _Default.GetCorrectName(Path.GetFileNameWithoutExtension(fileName) + "-form" + downloadExt, userAddress); // get the correct file name if it already exists
|
if (newFileName)
|
||||||
|
{
|
||||||
|
fileName = _Default.GetCorrectName(Path.GetFileNameWithoutExtension(fileName) + "-form" + downloadExt, userAddress); // get the correct file name if it already exists
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
fileName = _Default.GetCorrectName(Path.GetFileNameWithoutExtension(fileName) + "-form" + curExt, userAddress);
|
fileName = _Default.GetCorrectName(Path.GetFileNameWithoutExtension(fileName) + "-form" + curExt, userAddress);
|
||||||
|
}
|
||||||
|
forcesavePath = _Default.StoragePath(fileName, userAddress);
|
||||||
}
|
}
|
||||||
forcesavePath = _Default.StoragePath(fileName, userAddress);
|
else
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (newFileName)
|
|
||||||
{
|
{
|
||||||
fileName = _Default.GetCorrectName(Path.GetFileNameWithoutExtension(fileName) + downloadExt, userAddress);
|
if (newFileName)
|
||||||
}
|
{
|
||||||
|
fileName = _Default.GetCorrectName(Path.GetFileNameWithoutExtension(fileName) + downloadExt, userAddress);
|
||||||
|
}
|
||||||
|
|
||||||
forcesavePath = _Default.ForcesavePath(fileName, userAddress, false);
|
forcesavePath = _Default.ForcesavePath(fileName, userAddress, false);
|
||||||
if (string.IsNullOrEmpty(forcesavePath)) // create forcesave path if it doesn't exist
|
if (string.IsNullOrEmpty(forcesavePath)) // create forcesave path if it doesn't exist
|
||||||
|
{
|
||||||
|
forcesavePath = _Default.ForcesavePath(fileName, userAddress, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SaveFile(bytesFile, forcesavePath);// save document file
|
||||||
|
|
||||||
|
if (isSubmitForm)
|
||||||
{
|
{
|
||||||
forcesavePath = _Default.ForcesavePath(fileName, userAddress, true);
|
var jss = new JavaScriptSerializer();
|
||||||
|
var actions = jss.Deserialize<List<object>>(jss.Serialize(fileData["actions"]));
|
||||||
|
var action = jss.Deserialize<Dictionary<string, object>>(jss.Serialize(actions[0]));
|
||||||
|
var user = action["userid"].ToString(); // get the user id
|
||||||
|
DocEditor.CreateMeta(fileName, user, "Filling Form", userAddress); // create meta data for the forcesaved file
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
catch (Exception)
|
||||||
DownloadToFile(downloadUri, forcesavePath);
|
|
||||||
|
|
||||||
if (isSubmitForm)
|
|
||||||
{
|
{
|
||||||
var jss = new JavaScriptSerializer();
|
return 1;
|
||||||
var actions = jss.Deserialize<List<object>>(jss.Serialize(fileData["actions"]));
|
|
||||||
var action = jss.Deserialize<Dictionary<string, object>>(jss.Serialize(actions[0]));
|
|
||||||
var user = action["userid"].ToString(); // get the user id
|
|
||||||
DocEditor.CreateMeta(fileName, user, "Filling Form", userAddress); // create meta data for the forcesaved file
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -313,27 +332,29 @@ namespace OnlineEditorsExample
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void SaveFile(byte[] data, string path)
|
||||||
|
{
|
||||||
|
using (var fs = File.Open(path, FileMode.Create))
|
||||||
|
{
|
||||||
|
fs.Write(data, 0, data.Length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// save file information from the url to the file specified
|
// save file information from the url to the file specified
|
||||||
private static void DownloadToFile(string url, string path)
|
private static byte[] DownloadFile(string url)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(url)) throw new ArgumentException("url"); // url isn't specified
|
if (string.IsNullOrEmpty(url)) throw new ArgumentException("url"); // url isn't specified
|
||||||
if (string.IsNullOrEmpty(path)) throw new ArgumentException("path"); // file isn't specified
|
|
||||||
|
|
||||||
var req = (HttpWebRequest)WebRequest.Create(url);
|
var req = (HttpWebRequest)WebRequest.Create(url);
|
||||||
req.Timeout = 5000;
|
req.Timeout = 5000;
|
||||||
using (var stream = req.GetResponse().GetResponseStream()) // get input stream of the file information from the url
|
using (var stream = req.GetResponse().GetResponseStream()) // get input stream of the file information from the url
|
||||||
{
|
{
|
||||||
if (stream == null) throw new Exception("stream is null");
|
if (stream == null) throw new Exception("stream is null");
|
||||||
const int bufferSize = 4096;
|
|
||||||
|
|
||||||
using (var fs = File.Open(path, FileMode.Create))
|
using (MemoryStream memoryStream = new MemoryStream())
|
||||||
{
|
{
|
||||||
var buffer = new byte[bufferSize];
|
stream.CopyTo(memoryStream);
|
||||||
int readed;
|
return memoryStream.ToArray();
|
||||||
while ((readed = stream.Read(buffer, 0, bufferSize)) != 0)
|
|
||||||
{
|
|
||||||
fs.Write(buffer, 0, readed); // write bytes to the output stream
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user