我必须在数据库中存储多个文件。为了做到这一点,我使用blueimp编写的jQuery Multiple File Uplaod控件。对于服务器语言,我使用asp.net。它使用一个处理程序 - ashx接受每个特定文件并将其存储在数据库中。 在我的数据库中,我有一个存储过程,它返回当前上载文件的文档ID,然后将其存储到数据库中。 这是一个代码片段,它显示获取此ID是一个3步骤过程:
SELECT TOP 1 @docIdOut = tblFile.docId - ,@ creator = creator,@ created =创建FROM [tblFile] WHERE friendlyname LIKE @friendlyname和@categoryId = categoryId AND @objectId = objectId和@objectTypeId = objectTypeId ORDER BY tblFile.version DESC
IF @docIdOut = 0 BEGIN --get the next docId SELECT TOP 1
@docIdOut = docId + 1 FROM [tblFile] ORDER BY docId DESC END
IF @docIdOut = 0 BEGIN --set to 1 SET @docIdOut = 1 END
如果执行了多个对该存储过程的调用,则由于数据不一致会出现问题,但如果我添加了一个事务,那么某些文件的上传将被取消。
https://dl.dropboxusercontent.com/u/13878369/2013-05-20_1731.png
当执行被事务阻止时,是否有办法使用相同的参数再次调用存储过程?
另一种选择是使用blueimp插件与“sequentialUploads = true”选项同步使用 此选项适用于除firefox之外的所有浏览器,我读到它也不适用于Safari。
任何建议都会有所帮助。我尝试并启用了一次只选择一个文件的选项,这不是最好的,但会停止DB问题(strored procedure)并且会正确保存文件。
谢谢, 最好的祝福, Lyuubomir
答案 0 :(得分:0)
在main.js中设置singleFileUploads:true,sequentialUploads:false。
singleFileUploads:true表示使用针对XHR类型上传的单独请求上载选择的每个文件。然后,您可以获取单个文件的信息,并使用您刚刚获得的信息调用存储过程。