3

我必须在数据库中存储多个文件。为了做到这一点,我使用了 blueimp 编写的 jQuery Multiple File Uplaod 控件。对于服务器语言,我使用 asp.net。它使用一个处理程序——ashx,它接受每个特定文件并将其存储在数据库中。在我的数据库中,我有一个存储过程,它返回当前上传文件的文档 ID,然后将其存储到数据库中。这是其中的一个代码片段,它表明获取此 ID 是一个 3 步过程:

SELECT TOP 1 @docIdOut = tblFile.docId -- ,@creator=creator,@created=created FROM [tblFile] WHERE friendlyname LIKE @friendlyname AND @categoryId = categoryId AND @objectId = objectId AND @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

当执行被事务阻塞时,有没有办法用相同的参数再次调用存储过程?

另一种选择是与选项“sequentialUploads = true”同步使用blueimp插件。这个选项适用于除firefox之外的所有浏览器,我读到它也不适用于Safari。

任何的意见都将会有帮助。我尝试并启用一次只选择一个文件的选项,这不是最好的,但会停止数据库问题(存储过程)并正确保存文件。

谢谢, 最好的问候, Lyuubomir

4

1 回答 1

0

set singleFileUploads: true, sequentialUploads: false in the main.js.

singleFileUploads: true means each file of a selection is uploaded using an individual request for XHR type uploads. Then you can get information of an individual file and call the store procedure with the information you have just got.

于 2013-11-21T06:26:38.707 回答